将包含多个分隔符的文本文件转换为 CSV
Convert text file containing multiple delimiters to CSV
文本文件如下所示。我想把它转换成 CSV 文件。
和Pandas,当我用的时候:
df = pd.read_fwf(f)
看起来像:
似乎有制表符和space用于分隔符,我将行更改为:
df = pd.read_csv('Water level.txt' , sep = '[" "|\t]', encoding='GBK', engine = 'python')
但它警告:
pandas.errors.ParserError: Expected 14 fields in line 4, saw 16. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.
Python 将其转换为 CSV 文件的正确方法是什么?
如果数据结构没有改变,请尝试传入列宽。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_fwf.html 这里还有其他选项 read_fwf
。
验证宽度参数是否正确:
pd.read_fwf('JcP65rQY5F2Y.txt', widths=[5,10,9,2,5])
Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4
0 09:25 7.54 288 17 NaN
1 09:30 7.55 20 6 NaN
2 09:30 7.55 7 2 East
3 09:30 7.55 11 3 East
4 09:30 7.56 5 4 West
.. ... ... ... ... ...
194 09:59 7.60 3 1 East
195 09:59 7.60 9 4 East
196 09:59 7.60 8 1 West
197 09:59 7.60 51 3 West
198 09:59 7.59 20 15 East
[199 rows x 5 columns]
您的正则表达式需要调整,`r"[ \t]+" 选择任意长度的空格和制表符(1 或更大)。此外,pandas 使用文件的第一行来确定有多少列。您的示例以 4 列开始,然后再添加另一列。太晚了 - pandas 已经创建了 4 个元素行。您可以通过提供自己的列名来解决这个问题,让 pandas 知道实际有多少。在此示例中,我仅使用整数,但您可以为它们指定更有用的名称。
df = pd.read_csv('Water level.txt' , sep=r'[ \t]', encoding='GBK',
engine='python', names=range(5))
文本文件如下所示。我想把它转换成 CSV 文件。
和Pandas,当我用的时候:
df = pd.read_fwf(f)
看起来像:
似乎有制表符和space用于分隔符,我将行更改为:
df = pd.read_csv('Water level.txt' , sep = '[" "|\t]', encoding='GBK', engine = 'python')
但它警告:
pandas.errors.ParserError: Expected 14 fields in line 4, saw 16. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.
Python 将其转换为 CSV 文件的正确方法是什么?
如果数据结构没有改变,请尝试传入列宽。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_fwf.html 这里还有其他选项 read_fwf
。
验证宽度参数是否正确:
pd.read_fwf('JcP65rQY5F2Y.txt', widths=[5,10,9,2,5])
Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4
0 09:25 7.54 288 17 NaN
1 09:30 7.55 20 6 NaN
2 09:30 7.55 7 2 East
3 09:30 7.55 11 3 East
4 09:30 7.56 5 4 West
.. ... ... ... ... ...
194 09:59 7.60 3 1 East
195 09:59 7.60 9 4 East
196 09:59 7.60 8 1 West
197 09:59 7.60 51 3 West
198 09:59 7.59 20 15 East
[199 rows x 5 columns]
您的正则表达式需要调整,`r"[ \t]+" 选择任意长度的空格和制表符(1 或更大)。此外,pandas 使用文件的第一行来确定有多少列。您的示例以 4 列开始,然后再添加另一列。太晚了 - pandas 已经创建了 4 个元素行。您可以通过提供自己的列名来解决这个问题,让 pandas 知道实际有多少。在此示例中,我仅使用整数,但您可以为它们指定更有用的名称。
df = pd.read_csv('Water level.txt' , sep=r'[ \t]', encoding='GBK',
engine='python', names=range(5))