gpt4 book ai didi

python - Pandas read_csv() - Flie 包含不同的数据

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:30 24 4
gpt4 key购买 nike

问题:我正在尝试将 csv 读入包含不同列大小的数据的 pandas 数据帧。

示例和说明:

Code: 
df = pd.read_csv(input, error_bad_lines=False)

input:
ID, Time, Val
15, 18:00:01, 4
15, 18:00:02, 6
15, 18:00:03, 5
ID, Time, Val1, Val2
16 18:00:03, 1, 43
ID, Time, Val
15, 18:00:04, 8

并且这种模式在整个文件中持续存在。最初我正在考虑扔掉多余的列,因为 read_csv 选项会抛出错误并且不读取它们,我只是开始忽略它们。然而,我随后在数据框中得到了重复的 header ...为了解决这个问题,我尝试了 drop_duplicates()但发现只有pandas的V0.17才包含 keep=False选项。我最终开始说服自己尝试保留数据。这是我的问题。根据上面的数据集,我希望能够创建两个独特的数据框。您可以假设 ID 始终是唯一的,因此您可以为拥有的不同 ID 数量创建 N 个框架。每个 ID 不会有相同数量的 header 。一旦遇到不同的 ID,就会打印其标题。例如,如果我们点击另一个 ID 16,其标题将在数据之前打印。同样,如果我们点击另一个 ID 15,其标题将在其数据之前打印。

我想也许在开始使用数据帧之前预处理数据,因为这是一个选项。但由于我对 pandas 的功能还很陌生,我希望在我继续编写一些令人讨厌的预处理代码之前,这里的一些人会提出建议:)。我的另一个想法变成了一个问题 - 对于 error_bad_lines,有没有办法将这些行保存到另一个数据帧或其他东西?另外,我告诉 pandas 在 read_csv 中只查找 ID 为 X 的项目,然后对我的所有 ID 执行此操作?我要补充一点,ID 的数量是有限且已知的。

我当前的 pandas 版本是 0.14。

最佳答案

请注意,我更正了示例数据中我认为存在的拼写错误。

  • 我使用前瞻正则表达式分割您的数据。我寻找后跟 ID 的换行符。
  • 然后解析列表中的每个元素并连接。
<小时/>
from io import StringIO
import pandas as pd
import re

txt = """ID, Time, Val
15, 18:00:01, 4
15, 18:00:02, 6
15, 18:00:03, 5
ID, Time, Val1, Val2
16, 18:00:03, 1, 43
ID, Time, Val
15, 18:00:04, 8"""

def parse(s):
return pd.read_csv(StringIO(s), skipinitialspace=True)

pd.concat([parse(s) for s in re.split('\n(?=ID)', txt)])

ID Time Val Val1 Val2
0 15 18:00:01 4.0 NaN NaN
1 15 18:00:02 6.0 NaN NaN
2 15 18:00:03 5.0 NaN NaN
0 16 18:00:03 NaN 1.0 43.0
0 15 18:00:04 8.0 NaN NaN
<小时/>

以上是使用 OP 提供的示例数据进行的。如果这是在 csv 文件中,解决方案将如下所示

from io import StringIO
import pandas as pd
import re

with open('myfile.csv') as f:
txt = f.read()

def parse(s):
return pd.read_csv(StringIO(s), skipinitialspace=True)

pd.concat([parse(s) for s in re.split('\n(?=ID)', txt)])

关于python - Pandas read_csv() - Flie 包含不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44346185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com