读取所有列合并为一个的csv文件:千位逗号问题
Posted
技术标签:
【中文标题】读取所有列合并为一个的csv文件:千位逗号问题【英文标题】:Reading a csv file with all the columns combined into one: thousands place comma issue 【发布时间】:2017-10-05 19:59:04 【问题描述】:我想读取一个 csv 文件,该文件使用 python pandas 在一列中的数据框中的所有数据进行格式化。每一列的数据用逗号分隔。
但是,千位也有逗号,所以如果我用逗号分隔,如果一行中的一列包含超过 1,000 的数字,它就无法正常工作。如何去掉千位逗号?
例如:
CustomerID, Month-Date, Column 1, Column 2, Column 3
1223, AUG 2017, 10, 100, 1,100 #The last value is 1100 and not 100
1224, AUG 2017, 10, 1, 2
1225, AUG 2017, 2,110, 10, 13 #the first value is 2100 and not 2
【问题讨论】:
第一行不明确。第一行的值可以是 (1223, 'AUG 2017', 10, 100, 1100) 或 (1223, 'AUG 2017', 10100, 1, 100)。 通常,格式良好的 CSV 文件会使用引号消除这种情况的歧义。如果没有引号(或其他规则),您的数据将无法解析:(您需要返回生成此 CSV 的程序并在那里解决问题。 这在 Pandas IMO 中不值得尝试解决。打开 csv 文件,删除所有逗号。 这是一种新颖的格式。寄回去更换? 是的,我担心是这种情况,但只是检查以确保我没有遗漏任何东西。感谢您的所有帮助! 【参考方案1】:正如@A.Kot 建议的那样,您可以从xlsx
文件中读取每一行,删除,
功能,然后重新写入熊猫数据框。比如:
from __future__ import print_function
from os.path import join, dirname, abspath
import xlrd
fname = '_xlsx_path_\\data.xlsx'
# Open the workbook
xl_workbook = xlrd.open_workbook(fname)
xl_sheet = xl_workbook.sheet_by_name('Sheet1')
# Print all values, iterating through rows and columns
num_cols = xl_sheet.ncols # Number of columns
for row_idx in range(0, xl_sheet.nrows): # Iterate through rows
for col_idx in range(0, num_cols): # Iterate through columns
cell_obj = xl_sheet.cell(row_idx, col_idx) # Get cell object by row, col
if row_idx == 0:
columns = [c.encode("ascii") for c in cell_obj.value.split(',')]
print(columns)
print(' ')
else:
data_row = [d.encode("ascii") for d in cell_obj.value.split(',')]
print(data_row)
print(' ')
【讨论】:
【参考方案2】:如果您可以指望在列之间的每个逗号后都有一个空格,那么您可以让 pandas 跳过两边都有数字的逗号。
pandas.read_csv(..., sep=', ', ...)
# ^^ note the space after the comma
【讨论】:
我希望我能指望逗号后面的空格。这样会更容易,但逗号之间没有任何空格。不过谢谢! @pythonsandpandas 那么你最好的选择是按列的绝对位置。不知道熊猫能不能做到。 确实,pd.read_fwf
可以解析固定宽度的数据文件。但是正确对齐的数据是由另一个用户而不是 OP 编辑到问题中的,所以我不确定这是否真的对 OP 有帮助。以上是关于读取所有列合并为一个的csv文件:千位逗号问题的主要内容,如果未能解决你的问题,请参考以下文章