【问题标题】:Apply a function on each column of DataFrame filled with lists在填充列表的 DataFrame 的每一列上应用一个函数
【发布时间】:2019-12-06 16:42:06
【问题描述】:

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

【问题讨论】:

标签: python pandas


【解决方案1】:

看起来您需要带有自定义功能的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)

【讨论】:

  • 谢谢!这真的帮助我得到了我想要的!
【解决方案2】:

如果列表是字符串,则使用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

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2018-07-09
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多