我在 csv 文件中有多个数据(数据结构相似但不相同),某些行的行和列大小不同。
例如,每个 csv 文件的前三行具有不同的列数,即:
----------------
Table | Format |
----------------
Code | Label | Index |
-----------------------------------------
a | b | c | d | e |
-----------------------------------------
这看起来确实有点丑,而且很难像 pandas 那样读入并使用。
我想制作表格,以便它能够识别文件中列的最大长度,并在空白处添加任何填充以使尺寸相等。 IE。
-----------------------------------------
Table | Format | pad | pad | pad |
-----------------------------------------
Code | Label | Index | pad | pad |
-----------------------------------------
a | b | c | d | e |
-----------------------------------------
到目前为止,我研究了读取 pandas 并向 csv 文件添加标题,但由于每个 csv 文件的最大列数各不相同,所以我有点陷入困境。
任何帮助或指示将不胜感激!
最佳答案
如果您的列分隔符是逗号,则只需在每行末尾插入适当数量的逗号即可进行填充。使用 read_csv
pandas 会将填充的值读取为 NaN。
with open('/path/to/data.csv', 'r') as f:
data = f.read().split()
# Count the the number of columns in each line
cols = [row.count(',')+1 for row in data]
# Find the widest row
max_cols = max(cols)
# Loop over lines in text
for id, row in enumerate(data):
# Pad extra columns when necessary
if cols[id] < max_cols:
data[id] += (max_cols - cols[id]) * ','
# Write the data out
with open('/path/to/pad_data.csv', 'w') as f:
f.write('\n'.join(data))
设置一些测试数据:
data = '1,2,3\n4,\n5,6,7,8,9\n'
print(data)
#1,2,3
#4,
#5,6,7,8,9
应用上面的方法可以得到:
print('\n'.join(pad_data))
#1,2,3,,
#4,,,,
#5,6,7,8,9
关于python - 在 csv 文件中添加填充以使数据框可供 pandas 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54791292/