繁体   English   中英

如何读取 csv 文件,其中 pandas 在一列中有多个值?

[英]How do I read a csv File with pandas that has multiple values in one column?

我有一个看起来像这样的 csv 文件:

timestamp (int), array(value1,value2,...), identifier (string)

arrays 里面的值是这样写的:

List(value1, value2, value3)

值可以写成格式

1.23E4, -123456.78910

所以我最终想要的是一个带有时间戳和标识符的 dataframe,但每个点都有多个值。

我不知道如何在 python 中阅读带有 pandas 的 csv 文件。 如果我只是尝试

pd.read_csv("myFilePath")

它给了我

pandas.errors.ParserError: Error tokenizing data. C error: Expected 7 fields in line 3, saw 76

显然我没有告诉 pandas 如何正确地读取该文件,老实说我不太了解。 有人可以帮助我吗? 非常感谢

您可以只读取每行在单个列中表示的所有数据,然后从那里提取您需要的内容。

我认为您的数据可能看起来像这样

sim_csv = io.StringIO(
'''2022-07-20,List(1.23E4, -123456.78910),ID001
2022-07-21,List(2.23E4, -223456.78910),ID002
2022-07-22,List(3.23E4, -323456.78910),ID003
2022-07-23,List(4.23E4, -423456.78910, 55),ID004''')

全部阅读 - 单列

df = pd.read_fwf(sim_csv, widths=[999999], header=None)
print(df)

                                                  0
0      2022-07-20,List(1.23E4, -123456.78910),ID001
1      2022-07-21,List(2.23E4, -223456.78910),ID002
2      2022-07-22,List(3.23E4, -323456.78910),ID003
3  2022-07-23,List(4.23E4, -423456.78910, 55),ID004

提取你需要的东西

dfs = df[0].str.extract(r'(?P<timestamp>.+),.*List\((?P<raw_values>.+)\),(?P<id>.+)')
print(dfs)

    timestamp                 raw_values     id
0  2022-07-20      1.23E4, -123456.78910  ID001
1  2022-07-21      2.23E4, -223456.78910  ID002
2  2022-07-22      3.23E4, -323456.78910  ID003
3  2022-07-23  4.23E4, -423456.78910, 55  ID004

这使您的列表实际上仍然是一个字符串,而不是 Python 列表 object。 不确定您想对那里的值做什么。 也许让他们成为一个真正的清单。

真实列表的值

dfs['list_values'] = dfs['raw_values'].str.split(',')
print(dfs)

    timestamp                 raw_values     id                    list_values
0  2022-07-20      1.23E4, -123456.78910  ID001       [1.23E4,  -123456.78910]
1  2022-07-21      2.23E4, -223456.78910  ID002       [2.23E4,  -223456.78910]
2  2022-07-22      3.23E4, -323456.78910  ID003       [3.23E4,  -323456.78910]
3  2022-07-23  4.23E4, -423456.78910, 55  ID004  [4.23E4,  -423456.78910,  55]

此时列表中的值实际上仍然是字符串。 根据您要完成的工作,您可以从这里做很多事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM