得到一个 DataFrame,填充了不同的类型:字符串、整数、列表 我现在尝试将每一列的每个元素(包含一个不超过一个元素的列表)转换为字符串。我非常清楚与 lambda 函数相关的方法 apply,但我似乎没有完全掌握它...数据已使用 json.load(XXX) 从 json 文件导入,并使用 json.load(XXX) 分成不同的 DataFrames json_normalize。
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:
DataFrame "infos":
name town link number
Bob NY https://www.bobsite.com 00184747328859
Alice MI https://www.alicesite.com 00198309458093
最佳答案
看起来您需要带有自定义功能的df.applymap
。
例如:
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]
df = pd.DataFrame({'name':["Bob", "Alice"],
'town': ["NY", "MI"],
'link': [["https://www.bobsite.com"], ["https://www.alicesite.com"]],
'number': ["00184747328859", "00198309458093"]})
df["link"] = df["link"].str[0]
print(df)
关于python - 对填充列表的 DataFrame 的每一列应用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57252180/