我有一个格式如下的文本文件:
k1[a-token]
v1
v2
k2[a-token]
v1'
k3[a-token]
v1"
v2"
v3"
将这些数据读入这种形式的数据框的最简单方法是什么:
A B
0 k1 v1
1 k1 v2
2 k2 v1'
3 k3 v1"
4 k3 v2"
5 k3 v3"
那不涉及手动循环?或者是否有任何其他库允许我仅输入一些正则表达式来指定我的文本文件的结构并以上述表格形式输出数据?
最佳答案
设置
从@jezrael 借用
import pandas as pd
from pandas.compat import StringIO
temp=u"""
k1[a-token]
v1
v2
k2[a-token]
v1'
k3[a-token]
v1"
v2"
v3"
"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep="|", names=['B'])
print (df)
str.extract
在正则表达式中指定参数并向前看- 使用
duplicated
来标识我们要保留的行。
df = df.B.str.extract('(?P<A>.*(?=\[a-token\]))?(?P<B>.*)', expand=True).ffill()
df[df.duplicated(subset=['A'])].reset_index(drop=True)
A B
0 k1 v1
1 k1 v2
2 k2 v1'
3 k3 v1"
4 k3 v2"
5 k3 v3"
关于python - Pandas :解析结构化非表格文本中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42184014/