gpt4 book ai didi

python - 如何从带有附加分隔符的 csv 在 python 中创建 pandas 数据框?

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

我有一个很大的 csv(大约 400k 行),我希望将其转换为 python 中的数据框。原始文件有两列:文本列,后跟 int(或 NAN)列。

例子:

...
P-X1-6030-07-A01 368963
P-X1-6030-08-A01 368964
P-X1-6030-09-A01 368965
P-A-1-1011-14-G-01 368967
P-A-1-1014-01-G-05 368968
P-A-1-1017-02-D-01 368969
...

我希望按照示例文本最后三行的模式将文本列另外拆分为一系列列(例如,P A 1 1017 02 D 01 368969)

注意到文本字段可以有不同的格式(P-X1P-X-1),如何最好地实现这一点?

最佳答案

第一次尝试

read_csv 的规范表明它采用正则表达式,但这似乎是不正确的。检查源代码后,它似乎只需要一系列字符,它可以用来填充一组字符,后跟 +,因此下面的 sep 参数将用于创建正则表达式,如

`[- ]+`. 

导入必要的库以重新创建:

import pandas as pd
import StringIO

您可以使用一组字符作为分隔符,使用 pd.read_csv 无法解析不匹配的行,但如果您想单独解析它们:

pd.read_csv(StringIO.StringIO('''P-X1-6030-07-A01    368963
P-X1-6030-08-A01 368964
P-X1-6030-09-A01 368965'''), sep=r'- ') # sep arg becomes regex, i.e. `[- ]+`

pd.read_csv(StringIO.StringIO('''P-A-1-1011-14-G-01  368967
P-A-1-1014-01-G-05 368968
P-A-1-1017-02-D-01 368969'''), sep=r'- ')

但是 read_csv 显然无法使用真正的正则表达式作为分隔符。


最终解决方案

这意味着我们需要一个定制的解决方案:

import re
import StringIO
import pandas as pd

txt = '''P-X1-6030-07-A01 368963
P-X1-6030-08-A01 368964
P-X1-6030-09-A01 368965
P-A-1-1011-14-G-01 368967
P-A-1-1014-01-G-05 368968
P-A-1-1017-02-D-01 368969'''

fileobj = StringIO.StringIO(txt)

def df_from_file(fileobj):
'''
takes a file object, returns DataFrame with columns grouped by
contiguous runs of either letters or numbers (but not both together)
'''
# unfortunately, we must materialize the data before putting it in the DataFrame
gen_records = [re.findall(r'(\d+|[A-Z]+)', line) for line in fileobj]
return pd.DataFrame.from_records(gen_records)

df = df_from_file(fileobj)

现在 df 返回:

   0  1  2     3   4  5   6       7
0 P X 1 6030 07 A 01 368963
1 P X 1 6030 08 A 01 368964
2 P X 1 6030 09 A 01 368965
3 P A 1 1011 14 G 01 368967
4 P A 1 1014 01 G 05 368968
5 P A 1 1017 02 D 01 368969

关于python - 如何从带有附加分隔符的 csv 在 python 中创建 pandas 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26722829/

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