将字符串列表转换为pandas中

时间:2017-04-20 18:06:43

标签: python csv pandas numpy

我认为这是一个超级基本问题,但我无法找到解决方案。简而言之,我在csv中有一列是一个数字列表。由csv pandas生成的to_csv。尝试使用read_csv重新阅读时,它会自动将此数字列表转换为string

当试图使用它时,我显然会遇到错误。当我尝试使用to_numeric函数时,我也会收到错误,因为它是一个列表,而不是一个数字。

有什么方法可以解决这个问题吗?在表格下面张贴代码,但可能不是非常有用:

def write_func(dataset):
    features = featurize_list(dataset[column])  # Returns numpy array
    new_dataset = dataset.copy()  # Don't want to modify the underlying dataframe
    new_dataset['Text'] = features
    new_dataset.rename(columns={'Text': 'Features'}, inplace=True)
    write(new_dataset, dataset_name)

def write(new_dataset, dataset_name):
    dump_location = feature_set_location(dataset_name, self)
    featurized_dataset.to_csv(dump_location)

def read_func(read_location):
    df = pd.read_csv(read_location)
    df['Features'] = df['Features'].apply(pd.to_numeric)

Features列是有问题的列。当我尝试运行当前在read_func中的apply时,我收到此错误:

ValueError: Unable to parse string "[0.019636873200000002, 0.10695576670000001,...]" at position 0

我不能成为遇到这个问题的第一个人,有没有办法在读/写时处理这个问题?

2 个答案:

答案 0 :(得分:2)

您希望将literal_eval用作converter传递给pd.read_csv。下面是一个如何运作的例子。

from ast import literal_eval
form io import StringIO
import pandas as pd

txt = """col1|col2
a|[1,2,3]
b|[4,5,6]"""

df = pd.read_csv(StringIO(txt), sep='|', converters=dict(col2=literal_eval))
print(df)

  col1       col2
0    a  [1, 2, 3]
1    b  [4, 5, 6]

答案 1 :(得分:0)

我已经修改了你的最后一个功能,它运行正常。

def read_func(read_location):
    df = pd.read_csv(read_location)
    df['Features'] = df['Features'].apply(lambda x : pd.to_numeric(x))