だから私はこのように見えるCSVを持っています:
1 | 01-01-2019 | 724
2 | 01-01-2019 | 233 | 436
3 | 01-01-2019 | 345
4 | 01-01-2019 | 803 | 933 | 943 | 923 | 954
5 | 01-01-2019 | 454
...
また、次のコードを使用してdataFrameを生成しようとすると、.
df = pd.read_csv('data.csv', header=0, engine='c', error_bad_lines=False)
3列の行のみをdfに追加します(上から1、3、5行)
残りは「不良行」と見なされ、次のエラーが表示されます。
Skipping line 17467: expected 3 fields, saw 9
空のセルにnullを入力するだけで、csvにallデータを含むデータフレームを作成するにはどうすればよいですか?または、dfに追加する前に行の最大長を宣言する必要がありますか?
ありがとう!
Python csv
を使用してデータをインポートし、グルーミングをフォーマットすることを検討してください。カスタムの方言を実装して、さまざまなcsv-nessを処理できます。
import csv
import pandas as pd
csv_data = """1 | 01-01-2019 | 724
2 | 01-01-2019 | 233 | 436
3 | 01-01-2019 | 345
4 | 01-01-2019 | 803 | 933 | 943 | 923 | 954
5 | 01-01-2019 | 454"""
with open('test1.csv', 'w') as f:
f.write(csv_data)
csv.register_dialect('PipeDialect', delimiter='|')
with open('test1.csv') as csvfile:
data = [row for row in csv.reader(csvfile, 'PipeDialect')]
df = pd.DataFrame(data = data)
Csvインポート方言と次のDataFrameを提供します。
0 1 2 3 4 5 6
0 1 01-01-2019 724 None None None None
1 2 01-01-2019 233 436 None None None
2 3 01-01-2019 345 None None None None
3 4 01-01-2019 803 933 943 923 954
4 5 01-01-2019 454 None None None None
演習として、入力ファイルの空白のパディングを処理します。
固定幅の読み取りが機能するはずです:
_from io import StringIO
s = '''1 01-01-2019 724
2 01-01-2019 233 436
3 01-01-2019 345
4 01-01-2019 803 933 943 923 954
5 01-01-2019 454'''
pd.read_fwf(StringIO(s), header=None)
0 1 2 3 4 5 6
0 1 01-01-2019 724 NaN NaN NaN NaN
1 2 01-01-2019 233 436.0 NaN NaN NaN
2 3 01-01-2019 345 NaN NaN NaN NaN
3 4 01-01-2019 803 933.0 943.0 923.0 954.0
4 5 01-01-2019 454 NaN NaN NaN NaN
_
またはdelimiter
パラメータを使用
_s = '''1 | 01-01-2019 | 724
2 | 01-01-2019 | 233 | 436
3 | 01-01-2019 | 345
4 | 01-01-2019 | 803 | 933 | 943 | 923 | 954
5 | 01-01-2019 | 454'''
pd.read_fwf(StringIO(s), header=None, delimiter='|')
0 1 2 3 4 5 6
0 1 01-01-2019 724 NaN NaN NaN NaN
1 2 01-01-2019 233 436.0 NaN NaN NaN
2 3 01-01-2019 345 NaN NaN NaN NaN
3 4 01-01-2019 803 933.0 943.0 923.0 954.0
4 5 01-01-2019 454 NaN NaN NaN NaN
_
実際のファイルではStringIO
を使用しないことに注意してください。ファイルパスに置き換えてください:pd.read_fwf('data.csv', delimiter='|', header=None)
csvファイルの先頭に列を追加します(空またはそれ以外)。 Pandasは、最初の行をデフォルトのサイズとして使用し、その下にあるものはすべてNaN値を持ちます。例:
file.csv:
a,b,c,d,e
1,2,3
3
2,3,4
コード:
>>> import pandas as pd
>>> pd.read_csv('file.csv')
a b c d e
0 1 2.0 3.0 NaN NaN
1 3 NaN NaN NaN NaN
2 2 3.0 4.0 NaN NaN
colnames= [str(i) for i in range(9)]
df = pd.read_table('data.csv', header=None, sep=',', names=colnames)
変化する 9
colnames in number x
コードでエラーが発生した場合
Skipping line 17467: expected 3 fields, saw x