python - 在 csv 文件中添加填充以使数据框可供 pandas 读取

标签 python pandas csv padding

我在 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/

相关文章:

python - Pandas iterrows 获取行字符串作为列表

python - 如何使用 bool 掩码对 Pandas 数据框的分层列进行分配?

python - Scrapy 将 csv 文件中的额外数据传递给解析

python - django 1.7 & 删除 postgres 数据库并重新创建它

python - 尝试创建寄存器 View 时出现 NOT NULL 约束失败错误

python - 我的 Davies-Bouldin 索引的 python 实现是否正确?

python - 如果进程挂起/崩溃,如何重新启动 python 脚本

python - 如何从Python的行列表中选择特定元素

java - 使用 CSV 使用 Calcite 创建流式传输示例

amazon-web-services - Athena 查询返回值中的引号