Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据框嵌套列表拆分为新的命名列_Python_List_Pandas - Fatal编程技术网

Python 将数据框嵌套列表拆分为新的命名列

Python 将数据框嵌套列表拆分为新的命名列,python,list,pandas,Python,List,Pandas,我有一个如下形式的数据帧(df): name alias col3 mark david ['3109892828','email@john.com','123 main st'] john twixt ['5468392873','email@twix.com','345 grand st'] 将col3拆分为新的命名列的简明方法是什么?(可能使用lambda和apply)您可以对列表元素应用联接,以生成逗号分隔的字符串,然后使用expand=True调用矢量化的字符串来创建新列: In [

我有一个如下形式的数据帧(df):

name alias col3
mark david ['3109892828','email@john.com','123 main st']
john twixt ['5468392873','email@twix.com','345 grand st']

将col3拆分为新的命名列的简明方法是什么?(可能使用lambda和apply)

您可以对列表元素应用联接,以生成逗号分隔的字符串,然后使用
expand=True调用矢量化的字符串来创建新列:

In [12]:
df[['UserID', 'email', 'address']] = df['col3'].apply(','.join).str.split(expand=True)
df

Out[12]:
   alias                                        col3  name  \
0  david   [3109892828, email@john.com, 123 main st]  mark   
1  twixt  [5468392873, email@twix.com, 345 grand st]  john   

                          UserID  email address  
0  3109892828,email@john.com,123   main      st  
1  5468392873,email@twix.com,345  grand      st
一个更简洁的方法是应用
pd.Series
ctor,它将把每个列表变成一个系列:

In [15]:
df[['UserID', 'email', 'address']] = df['col3'].apply(pd.Series)
df

Out[15]:
   alias                                        col3  name      UserID  \
0  david   [3109892828, email@john.com, 123 main st]  mark  3109892828   
1  twixt  [5468392873, email@twix.com, 345 grand st]  john  5468392873   

            email       address  
0  email@john.com   123 main st  
1  email@twix.com  345 grand st  

这是我想到的。它包括对原始文件的一点清理,以及到字典的转换

import pandas as pd
with open('/path/to/file', 'rb') as f:
    data = f.readlines()

data = map(lambda x: x.split('}'), data)
data_df = pd.DataFrame(data)
data_dfn = data_df.transpose()
data_new = data_dfn[0].map(lambda x: x.lstrip('[,{)').replace("'","").split(','))

s = pd.DataFrame(data_new)
d = dict(data_new)
D = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in d.iteritems() ]))
D = D.transpose()

如果“列”合法地包含逗号,这可能会造成困难。。。也许像“代码> df[[ ID ],‘email’,‘地址’’)[COL3..Apple(Pd.Stand)< /Cube >然后删除<代码> COL3 > HM.H.M.真的,但是除非OP在它们的数据中有这个,我不认为这是一个问题,仍然应用系列Cor是干净的,足够的,将更新,谢谢,这将是一个很好的解决方案,但似乎我的数组中每行的列数并不相同。。那么,如果嵌套列表中每个记录的字段数不相同,我该怎么办?下面是我得到的错误:ValueError:列的长度必须与键的长度相同这里是我使用split()时得到的错误:TypeError:split()得到了一个意外的关键字参数“expand”,元素数不一致,那么你不能创建新列,除非长度相同,你使用的熊猫是什么版本?