I have an n-by-m Pandas DataFrame df
defined as follows. (I know this is not the best way to do it. It makes sense for what I'm trying to do in my actual code, but that would be TMI for this post so just take my word that this approach works in my particular scenario.)
>>> df = DataFrame(columns=['col1']) >>> df.append(Series([None]), ignore_index=True) >>> df Empty DataFrame Columns: [col1] Index: []
I stored lists in the cells of this DataFrame as follows.
>>> df['column1'][0] = [1.23, 2.34] >>> df col1 0 [1, 2]
For some reason, the DataFrame stored this list as a string instead of a list.
>>> df['column1'][0] '[1.23, 2.34]'
I have 2 questions for you.
Update
The DataFrame I was using had been saved and loaded from a CSV format. This format, rather than the DataFrame itself, converted the list from a string to a literal.
Dataframe() function to declare the DataFrame from the dictionary and then use the tolist() function to convert the Dataframe to a list containing all the rows of column 'emp_name'. Once you will print 'd' then the output will display in the form of a list.
The split() method is the recommended and most common method used to convert string to list in Python.
As you pointed out, this can commonly happen when saving and loading pandas DataFrames as .csv
files, which is a text format.
In your case this happened because list objects have a string representation, allowing them to be stored as .csv
files. Loading the .csv
will then yield that string representation.
If you want to store the actual objects, you should use DataFrame.to_pickle()
(note: objects must be picklable!).
To answer your second question, you can convert it back with ast.literal_eval
:
>>> from ast import literal_eval >>> literal_eval('[1.23, 2.34]') [1.23, 2.34]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With