簡體   English   中英

Pandas CSV文件,中間偶爾會有額外的列

[英]Pandas CSV file with occasional extra columns in the middle

我正在處理大量(數千)~100k行csv文件,這些文件是由其他人生成的。 10個文件中有9個文件有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 isnull的位置,保留這些行,然后刪除多余的行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM