如何将 csv 字符串转换为 pandas 中的列表?

Posted

技术标签:

【中文标题】如何将 csv 字符串转换为 pandas 中的列表?【英文标题】:How do I convert csv string to list in pandas? 【发布时间】:2016-11-05 09:07:55 【问题描述】:

我正在使用具有以下格式的 csv 文件:

"Id","Sequence"
3,"1,3,13,87,1053,28576,2141733,508147108,402135275365,1073376057490373,9700385489355970183,298434346895322960005291,31479360095907908092817694945,11474377948948020660089085281068730"
7,"1,2,1,5,5,1,11,16,7,1,23,44,30,9,1,47,112,104,48,11,1,95,272,320,200,70,13,1,191,640,912,720,340,96,15,1,383,1472,2464,2352,1400,532,126,17,1,767,3328,6400,7168,5152,2464,784,160,19,1,1535,7424"
8,"1,2,4,5,8,10,16,20,32,40,64,80,128,160,256,320,512,640,1024,1280,2048,2560,4096,5120,8192,10240,16384,20480,32768,40960,65536,81920,131072,163840,262144,327680,524288,655360,1048576,1310720,2097152"
11,"1,8,25,83,274,2275,132224,1060067,3312425,10997342,36304451,301432950,17519415551,140456757358,438889687625,1457125820233,4810267148324,39939263006825,2321287521544174,18610239435360217"

我想将其读入一个数据框,其中df['Id'] 的类型类似于整数,df['Sequence'] 的类型类似于列表。

我目前有以下杂乱无章的代码:

def clean(seq_string):
    return list(map(int, seq_string.split(',')))

# Read data
training_data_file = "data/train.csv"    
train = pd.read_csv(training_data_file)
train['Sequence'] = list(map(clean, train['Sequence'].values))

这似乎可行,但我觉得使用 pandas 和 numpy 可以在本地实现同样的效果。

有人推荐吗?

【问题讨论】:

【参考方案1】:

您可以为Sequence 列指定converter

convertersdict,默认None

转换函数的字典 某些列中的值。键可以是整数或列 标签

train = pd.read_csv(training_data_file, converters='Sequence': clean)

【讨论】:

美丽。以为会是这样简单的事情。 :) 干杯!【参考方案2】:

这也有效,除了 Sequence 是字符串列表而不是 int 列表:

df = pd.read_csv(training_data_file)
df['Sequence'] = df['Sequence'].str.split(',')

将每个元素转换为 int:

df = pd.read_csv(training_data_file)
df['Sequence'] = df['Sequence'].str.split(',').apply(lambda s: list(map(int, s)))

【讨论】:

如果我想将其转换为 int 列表,我可以附加 .convert_objects(convert_numeric=True),对吗? 该命令似乎已被弃用,需要循环遍历列表并手动转换。但这会以某种方式回到原始解决方案。【参考方案3】:

另一种解决方案是使用ast 模块中的literal_evalliteral_eval 将字符串评估为 Python 解释器的输入,并应按预期返回列表。

def clean(x):
    return literal_eval(x)

train = pd.read_csv(training_data_file, converters='Sequence': clean)

【讨论】:

以上是关于如何将 csv 字符串转换为 pandas 中的列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 csv 字符串转换为 pandas 中的列表?

如何自动将csv转换为pandas?

如何将字符串字典转换为字典并拆分为单独的列

如何将 Pandas 系列中的多个字典键转换为 DataFrame 中的列?

pandas.read_csv 将字符串转换为科学记数法中的“数字”(我不想要)

python - 如何将csv转换为python pandas中的嵌套json?