caa*_*aax 6 python csv dataframe pandas
所以我有一个看起来像这样的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
...
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下代码生成dataFrame时。
df = pd.read_csv('data.csv', header=0, engine='c', error_bad_lines=False)
Run Code Online (Sandbox Code Playgroud)
它仅将3列的行添加到df(上方的第1、3和5行)
其余的被认为是“坏线”,给我以下错误:
Skipping line 17467: expected 3 fields, saw 9
Run Code Online (Sandbox Code Playgroud)
如何创建包含csv中所有数据的数据框,可能只是用null填充空单元格?还是在添加到df之前必须声明最大行长?
谢谢!
如果使用 only pandas,则逐行读取,然后处理分隔符。
import pandas as pd
df = pd.read_csv('data.csv', header=None, sep='\n')
df = df[0].str.split('\s\|\s', expand=True)
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
Run Code Online (Sandbox Code Playgroud)
如果您知道数据包含N列,您可以通过names参数提前告诉 Pandas 需要多少列:
import pandas as pd
df = pd.read_csv('data', delimiter='|', names=list(range(7)))
print(df)
Run Code Online (Sandbox Code Playgroud)
产量
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
Run Code Online (Sandbox Code Playgroud)
如果你有一个上限,N, 列数,那么你可以让 Pandas 读取N列,然后dropna用来删除完全空的列:
import pandas as pd
df = pd.read_csv('data', delimiter='|', names=list(range(20))).dropna(axis='columns', how='all')
print(df)
Run Code Online (Sandbox Code Playgroud)
产量
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
Run Code Online (Sandbox Code Playgroud)
请注意,如果它们完全为空,这可能会从数据集的中间删除列(不仅仅是右侧的列)。
| 归档时间: |
|
| 查看次数: |
2977 次 |
| 最近记录: |