Python读取带有数组列的csv



我有一些csv文件,包括数组列。例如:

a,b,c
1,1|2|3,4.5|5.5|6.5
2,7|8|9,10.5|11.5|12.5

Delimiter 1是,,用于分隔字段a、b和c。在这种情况下,Delimiter 2是|,但可以更改。

python中是否有可能直接将其作为pandas数据帧读取?字段b和c应该是数据帧中的一个数组/序列。

我现在所做的是将csv读取为字符串:

df = pd.read_csv('data.csv', dtype='str')

然后使用np.fromstring将所有字符串转换为numpy数组:

type_dict = {
"a": "int",
"b": "int",
"c": "float"
}
def make_split(text, dt):
return np.fromstring(text, sep="|", dtype=dt)
df = df.apply(lambda x: x.apply(make_split, dt=type_dict[x.name]))

但我的文件需要几分钟时间。有没有更快的选择?

您可以使用.read_csv()converters参数来解析列:

import pandas as pd
import numpy as np

df = pd.read_csv('data.csv', converters={
'b': lambda x: np.array(x.split('|'), dtype='int'),
'c': lambda x: np.array(x.split('|'), dtype='float')
})
print(df)

输出:

a          b                   c
0  1  [1, 2, 3]     [4.5, 5.5, 6.5]
1  2  [7, 8, 9]  [10.5, 11.5, 12.5]
df=pd.read_csv(r'csv2.txt', sep=',')

df['b']=df['b'].str.split('|').apply(lambda x: [int(i) for i in x])
df['c']=df['c'].str.split('|').apply(lambda x: [float(i) for i in x])
df
a   b   c
0   1   [1, 2, 3]   [4.5, 5.5, 6.5]
1   2   [7, 8, 9]   [10.5, 11.5, 12.5]

相关内容

  • 没有找到相关文章

最新更新