繁体   English   中英

使用唯一的分隔符和行尾将txt文件读取到pandas数据帧

[英]Read txt file to pandas dataframe with unique delimiter and end of line

我有一个表格的文本文件,有一个唯一的分隔符和一组唯一的字符来标记每一行/行的结尾。

例如由#%#标记的新列由##@##标记的新行

所以文本文件可能会读...

cat#%#dog#%#rat#%#cow##@##red#%#blue#%#green#%#yellow##@##north#%#south#%#east#%#west

应该将其视为具有 3 行 4 列的表格,我可以在加载过程中添加列名。

奶牛
红色的 蓝色的 绿色 黄色
东方 西

我试过pd.read_csv(file_name.txt, delimiter="#*#", lineterminator = '##@##')引擎作为 python 和 c,但 c 不能接受多个字符delimiter 和 python 不能接受 delimiter 和 lineterminator 的值。

我唯一的选择是读取文本文件、将分隔符和行尾值更改为单个字符、使用 read_csv 保存并再次读取吗?

根据官方文档

lineterminator : str (length 1), 可选字符将文件分成几行。 仅对 C 解析器有效。

因此,我认为您最好的选择是在使用 read_csv 之前打开文本文件并替换行终止符。

我想正如 matheubv 所指出的那样,没有办法用pd.read_csv解决这个pd.read_csv 然而,这可以很容易地修复几行代码。 只需打开文件(在示例sample.csv )并解析它(使用字符串方法.replace() )。 之后,您可以使用非常基本的列表理解读取当前保存为data_string字符串的数据。

希望这个解决方法可以帮助你

import pandas as pd
from pathlib import Path

p = Path("Data/sample.csv")

with p.open() as f:
    string_data = f.readline().replace('#%#',';').replace('##@##','\n')
    df = pd.DataFrame([x.split(';') for x in string_data.split('\n')])
    print(df)

输出:

       0      1      2       3
0    cat    dog    rat     cow
1    red   blue  green  yellow
2  north  south   east    west

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM