Python 对填充列表的数据帧的每列应用函数
获取了一个数据帧,填充了不同的类型:string、int、list 我现在尝试将每个列的每个元素(包含不超过一个元素的列表)转换为字符串。我非常清楚与lambda函数相关的方法,但我似乎没有完全掌握它。。。数据已使用json.load(XXX)从json文件导入,并使用json_normalize拆分为不同的数据帧Python 对填充列表的数据帧的每列应用函数,python,pandas,Python,Pandas,获取了一个数据帧,填充了不同的类型:string、int、list 我现在尝试将每个列的每个元素(包含不超过一个元素的列表)转换为字符串。我非常清楚与lambda函数相关的方法,但我似乎没有完全掌握它。。。数据已使用json.load(XXX)从json文件导入,并使用json_normalize拆分为不同的数据帧 DataFrame "infos": name town link number Bob NY
DataFrame "infos":
name town link number
Bob NY ["https://www.bobsite.com"] 00184747328859
Alice MI ["https://www.alicesite.com"] 00198309458093
Python代码:
infos = infos.apply(lambda x: x[0])
# or if just accessing one column
infos = infos.link.apply(lambda x: x[0])
总的来说,这似乎不是正确的处理方法
预计这将是新的数据帧:
DataFrame "infos":
name town link number
Bob NY https://www.bobsite.com 00184747328859
Alice MI https://www.alicesite.com 00198309458093
看起来您需要使用自定义finction
df.applymap
Ex:
df = pd.DataFrame({'name':["Bob", "Alice"],
'town': ["NY", "MI"],
'link': [["https://www.bobsite.com"], ["https://www.alicesite.com"]],
'number': ["00184747328859", "00198309458093"]})
def cust_func(row):
if isinstance(row, list): #Check if object is list
if len(row) == 1: #Check if list size == 1
return row[0]
return row
df = df.applymap(cust_func)
print(df)
link name number town
0 https://www.bobsite.com Bob 00184747328859 NY
1 https://www.alicesite.com Alice 00198309458093 MI
输出:
df = pd.DataFrame({'name':["Bob", "Alice"],
'town': ["NY", "MI"],
'link': [["https://www.bobsite.com"], ["https://www.alicesite.com"]],
'number': ["00184747328859", "00198309458093"]})
def cust_func(row):
if isinstance(row, list): #Check if object is list
if len(row) == 1: #Check if list size == 1
return row[0]
return row
df = df.applymap(cust_func)
print(df)
link name number town
0 https://www.bobsite.com Bob 00184747328859 NY
1 https://www.alicesite.com Alice 00198309458093 MI
如果只有一列,并且列表中只有一个值,请使用
.str[0]
看起来您需要使用自定义finction
df.applymap
Ex:
df = pd.DataFrame({'name':["Bob", "Alice"],
'town': ["NY", "MI"],
'link': [["https://www.bobsite.com"], ["https://www.alicesite.com"]],
'number': ["00184747328859", "00198309458093"]})
def cust_func(row):
if isinstance(row, list): #Check if object is list
if len(row) == 1: #Check if list size == 1
return row[0]
return row
df = df.applymap(cust_func)
print(df)
link name number town
0 https://www.bobsite.com Bob 00184747328859 NY
1 https://www.alicesite.com Alice 00198309458093 MI
输出:
df = pd.DataFrame({'name':["Bob", "Alice"],
'town': ["NY", "MI"],
'link': [["https://www.bobsite.com"], ["https://www.alicesite.com"]],
'number': ["00184747328859", "00198309458093"]})
def cust_func(row):
if isinstance(row, list): #Check if object is list
if len(row) == 1: #Check if list size == 1
return row[0]
return row
df = df.applymap(cust_func)
print(df)
link name number town
0 https://www.bobsite.com Bob 00184747328859 NY
1 https://www.alicesite.com Alice 00198309458093 MI
如果只有一列,并且列表中只有一个值,请使用
.str[0]
如果列表是字符串,请使用
eval
,否则可以忽略
out['link'] = out.link.apply(eval).apply(' '.join)
输出
name town link number
0 Bob NY https://www.bobsite.com 184747328859
1 Alice MI https://www.alicesite.com 198309458093
如果列表是字符串,请使用
eval
,否则可以忽略
out['link'] = out.link.apply(eval).apply(' '.join)
输出
name town link number
0 Bob NY https://www.bobsite.com 184747328859
1 Alice MI https://www.alicesite.com 198309458093
可能的副本可能的副本谢谢!这真的帮助我得到了我想要的!非常感谢。这真的帮助我得到了我想要的!