gpt4 book ai didi

python - 如果 header=None,则使用 pandas 确定 csv 文件中的标题

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

有点麻烦,非常感谢您的帮助。尝试验证具有不同 header 结构的不同 csv 文件。例如 type1.csv 有以下内容

COL1|COL2|COL3|COL4
A1|A2|A3|A4
B1|B2|B3|B4
C1|C2|C3|C4
D1|D2|D3|D4

使用 header=None

df = pd.read_csv(type1.csv, sep='|', header=None)

渲染

#     0     1     2     3
0 COL1 COL2 COL3 COL4
1 A1 A2 A3 A4
2 B1 B2 B3 B4
3 C1 C2 C3 C4
4 D1 D2 D3 D4

这很好,因为我可以在索引 0(col1、col2 等)的列轴上发出替换

header = df.columns.values

但是,如果我有另一个具有以下结构的文件 type2.csv

Datetime|timezone|source|unique identifier
Non Header Row Count = 4 |||
COL1|COL2|COL3|COL4
A1|A2|A3|A4
B1|B2|B3|B4
C1|C2|C3|C4
D1|D2|D3|D4

带标题 = 无给我数据框

#                          0         1       2                  3
0 Datetime timezone source unique identifier
1 Non Header Row Count = 4 NaN NaN NaN
2 COL1 COL2 COL3 COL4
3 A1 A2 A3 A4
4 B1 B2 B3 B4
5 C1 C2 C3 C4
6 D1 D2 D3 D4

我想实现的方法是读取一个数据帧,并将 header 设置为无,然后遍历以查找具有任何值 COL1、COL2、COL3 等的行,并将数据帧拆分为高于该索引的值,也许使用head(n) 其中 n 是包含 COL1、COL2 等的行,无论该行上方是什么(我计划将其拆分为一个新的数据框以对内容进行一些分析)

示例分割

#                          0         1       2                  3
0 Datetime timezone source unique identifier
1 Non Header Row Count = 4 NaN NaN NaN
#     0     1     2     3
0 COL1 COL2 COL3 COL4
1 A1 A2 A3 A4
2 B1 B2 B3 B4
3 C1 C2 C3 C4
4 D1 D2 D3 D4

这是否可以使用 isin() 或 isin() 与正则表达式或 query() 的组合来实现?我已经搜索过类似的示例和问题,但无法弄清楚它是否可以正常工作(而且我仍在掌握 pandas 文档)。

我想避免 skiprows,因为我确实希望将数据保留在 COL1、COL2、COL3 行之上以进行数据完整性检查,因此执行预验证步骤读取文件并确定我的标题列位置然后读取它作为一个使用 skiprows 的数据框并不是这里的最佳方法。

如果可以的话,我们将不胜感激。如果问题不清楚或者我在做愚蠢的假设/方法不好,我深表歉意。欢迎任何批评、反馈或建议(建设性的或其他的:))

最佳答案

您可以使用:

import pandas as pd
import io

temp=u"""Datetime|timezone|source|unique identifier
Non Header Row Count = 4 |||
COL1|COL2|COL3|COL4
A1|A2|A3|A4
B1|B2|B3|B4
C1|C2|C3|C4
D1|D2|D3|D4"""
#after testing replace io.StringIO(temp) to filename
df1 = pd.read_csv(io.StringIO(temp), sep="|")
print df1
Datetime timezone source unique identifier
0 Non Header Row Count = 4 NaN NaN NaN
1 COL1 COL2 COL3 COL4
2 A1 A2 A3 A4
3 B1 B2 B3 B4
4 C1 C2 C3 C4
5 D1 D2 D3 D4

df2 = df1[2:]
df2.columns = df1.loc[1,:]
df2 = df2.reset_index(drop=True).rename_axis(None, axis=1)
print df2
COL1 COL2 COL3 COL4
0 A1 A2 A3 A4
1 B1 B2 B3 B4
2 C1 C2 C3 C4
3 D1 D2 D3 D4

print df1[:1]
Datetime timezone source unique identifier
0 Non Header Row Count = 4 NaN NaN NaN

编辑:

然后您可以通过contains 在第一列中找到COL1 的索引|与 boolean indexing :

col = df1[df1.iloc[:,0].str.contains('COL1')].index.tolist()[0]
print col
1

df2 = df1[col+1:]
df2.columns = df1.loc[col,:]
df2 = df2.reset_index(drop=True).rename_axis(None, axis=1)
print df2
COL1 COL2 COL3 COL4
0 A1 A2 A3 A4
1 B1 B2 B3 B4
2 C1 C2 C3 C4
3 D1 D2 D3 D4

print df1[:col]
Datetime timezone source unique identifier
0 Non Header Row Count = 4 NaN NaN NaN

关于python - 如果 header=None,则使用 pandas 确定 csv 文件中的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37206142/

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