Python 对填充列表的数据帧的每列应用函数

Python 对填充列表的数据帧的每列应用函数,python,pandas,Python,Pandas,获取了一个数据帧,填充了不同的类型:string、int、list 我现在尝试将每个列的每个元素(包含不超过一个元素的列表)转换为字符串。我非常清楚与lambda函数相关的方法,但我似乎没有完全掌握它。。。数据已使用json.load(XXX)从json文件导入,并使用json_normalize拆分为不同的数据帧 DataFrame "infos": name town link number Bob NY

获取了一个数据帧,填充了不同的类型:string、int、list 我现在尝试将每个列的每个元素(包含不超过一个元素的列表)转换为字符串。我非常清楚与lambda函数相关的方法,但我似乎没有完全掌握它。。。数据已使用json.load(XXX)从json文件导入,并使用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 "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

可能的副本可能的副本谢谢!这真的帮助我得到了我想要的!非常感谢。这真的帮助我得到了我想要的!