gpt4 book ai didi

python - Pandas CSV 文件,中间偶尔有额外的列

转载 作者:行者123 更新时间:2023-11-30 23:31:15 24 4
gpt4 key购买 nike

我正在处理由其他人生成的大量(数千)约 100k 行 csv 文件。十分之九的文件有 8 列,一切正常。第 10 次左右,大约 10 行将在第 6 列之后插入 2 个额外的列:(为简单起见,我们假设所有行中的值都具有相同的值。)

A,B,C,D,E,F,G,H
A,B,C,D,E,F,G,H
A,B,C,D,E,F,Foo,Bar,G,H
A,B,C,D,E,F,G,H
A,B,C,D,E,F,Foo,Bar,G,H
A,B,C,D,E,F,G,H
A,B,C,D,E,F,G,H

我无法控制数据文件的生成,需要在我这边清理它们,但我相信具有额外列的行已损坏数据,所以我现在只想拒绝它们。我想出了一个简单的方法来处理这个问题,那就是首先将我的数据加载到一个 10 列的 DataFrame 中:

In [100]: df = pd.read_csv(data_dir + data_file, names=ColumnNames)

In [101]: data_df
Out[101]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 99531 entries, 0 to 99530
Data columns:
time 99531 non-null values
var1 99531 non-null values
var2 99531 non-null values
var3 99531 non-null values
var4 99531 non-null values
var5 99531 non-null values
var6 98386 non-null values
var7 29829 non-null values
extra1 10 non-null values
extra2 10 non-null values
dtypes: float64(3), int64(5), object(2)

然后检查 extra1 或 extra2 是否为空,保留这些行,然后删除多余的行。

data_df = data_df[pd.isnull(data_df['extra1']) & pd.isnull(data_df['extra2'])]
del data_df['extra1']
del data_df['extra2']

这似乎有点绕/不理想。有谁知道如何清洁这个更好的主意吗?

谢谢

最佳答案

如果您想删除坏行,您可以使用 error_bad_lines=False (如果您希望它保持安静,则可以使用 warn_bad_lines = False) :

>>> !cat unclean.csv
A,B,C,D,E,F,G,H
A,B,C,D,E,F,G,H
A,B,C,D,E,F,Foo,Bar,G,H
A,B,C,D,E,F,G,H
A,B,C,D,E,F,Foo,Bar,G,H
A,B,C,D,E,F,G,H
A,B,C,D,E,F,G,H
>>> df = pd.read_csv("unclean.csv", error_bad_lines=False, header=None)
Skipping line 3: expected 8 fields, saw 10
Skipping line 5: expected 8 fields, saw 10

>>> df
0 1 2 3 4 5 6 7
0 A B C D E F G H
1 A B C D E F G H
2 A B C D E F G H
3 A B C D E F G H
4 A B C D E F G H

关于python - Pandas CSV 文件,中间偶尔有额外的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20062470/

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