导入数据,每个值包含列标签

时间:2019-05-16 21:47:12

标签: python pandas dataframe import

我的文本文件中没有标题。每行中的值都有一个标签,指示它们属于哪一列。我想将这些标签用作列名,并在列下输入数据。

我要导入一个包含以下内容的文本文件:

Column1=variable11&Column2=variable12&Column3=variable13&Column4=variable14
Column1=variable12&Column2=variable22&Column3=variable23
Column1=variable13&Column2=variable32&Column3=variable33&Column4=variable34&Column5=variable35

我希望结果是这样的表:

Column1         Column2         Column3         Column4         Column5
variable11  variable12  variable13  variable14  
variable21  variable22  variable23      
variable31  variable32  variable33  variable34  variable35

2 个答案:

答案 0 :(得分:1)

我在这里假设第2行和第3行上的Column1=variable1=21是错误的。

df = pd.read_csv('file', header=None)

df = df[0].str.split('=|&', expand=True)
tmp = df.loc[:,1::2].copy()
tmp.columns = df.loc[:,::2].apply(lambda x: x.dropna().iloc[0])

输出

    Column1     Column2     Column3     column4     Column5
0   variable11  variable12  variable13  variable14  None
1   variable21  variable22  variable23  None        None
2   variable31  variable32  variable33  variable34  variable35

答案 1 :(得分:1)

您的数据中有多个错字,可能需要两次split才能将格式恢复为dict,然后将dict传递给pandas.DataFrame构造函数

pd.DataFrame([dict(x)for x in df.Read.str.split('&').apply(lambda x : [tuple(y.split('=',1)) for y in x])])
Out[128]: 
        Column1     Column2     Column3     Column4     Column5     column4
0    variable11  variable12  variable13         NaN         NaN  variable14
1  variable1=21  variable22  variable23         NaN         NaN         NaN
2  variable1=31  variable32  variable33  variable34  variable35         NaN

df=pd.DataFrame([dict(x)for x in df.Read.str.split('&').apply(lambda x : [tuple(y.split('=',1)) for y in x])])
df.columns=df.columns.str.upper()
df=df.sum(axis=1,level=0)