我有一个文本文件(one.txt),其中包含任意数量的键值对(其中键和值之间用=
隔开–例如1=8
)。以下是一些示例:
1=88|11=1438|15=KKK|45=00|45=00|21=66|86=a
4=13|11=1438|49=DDD|8=157.73|67=00|45=00|84=b|86=a
6=84|41=18|56=TTT|67=00|4=13|45=00|07=d
我需要创建一个带有字典列表的DataFrame,其中每一行都是列表中的一个字典,如下所示:
[{1:88,11:1438,15:kkk,45:7.7....},{4:13,11:1438....},{6:84,41:18,56:TTT...}]
df = pd.read_csv("input.txt",names=['text'],header=None)
data = df['text'].str.split("|")
names=[ y.split('=') for x in data for y in x]
ds=pd.DataFrame(names)
print ds
如何通过分割=
符号来为每行创建一个字典?
应为一行多列。 DataFrame应该将所有键作为行,将值作为列。
示例:
1 11 15 45 21 86 4 49 8 67 84 6 41 56 45 07
88 1438 kkk 00 66 a
na 1438 na .....
答案 0 :(得分:0)
我认为执行.pivot
是可行的。试试这个:
import pandas as pd
df = pd.read_csv("input.txt",names=['text'],header=None)
data = df['text'].str.split("|")
names=[ y.split('=') for x in data for y in x]
ds=pd.DataFrame(names)
ds = ds.pivot(columns=0).fillna('')
.fillna('')
除去None
值。如果要替换为na
,可以使用.fillna('na')
。
输出:
ds.head()
1
0 07 1 11 15 21 4 41 45 49 56 6 67 8 84 86
0 88
1 1438
2 KKK
3 00
4 00
对于空间,我没有打印整个数据框,但是它根据键进行列索引,然后根据每行的值进行值索引(保留逐行字典)。