簡體   English   中英

如何用 pandas 中的列表替換屬於 dataframe 的字符串?

[英]How to replace a string that is a part of a dataframe with a list in pandas?

我是編碼的初學者,因為這是一個非常簡單的問題,我知道肯定有答案。 然而,我已經搜索了大約半個小時,在谷歌中輸入了無數的查詢,一切都在我腦海中浮現。

假設我有一個 dataframe 列“姓名”、“愛好”和 2 個人,所以 2 行。 目前,我的愛好是“hobby1,hobby2”形式的字符串。 我想把它改成 ["hobby1", "hobby2"]

hobbies_as_string = df.iloc[0, 2]
hobbies_as_list = hobbies_as_string.split(',')
df.iloc[0, -2] = hobbies_as_list

但是,這會導致錯誤,ValueError: Must have equal len keys and value when setting with an iterable。 我不明白為什么如果我得到 hobbies_as_string 作為副本,我可以將 hobbies 列分配為列表沒有問題。 我還可以將 df.iloc[0,-2] 分配為字符串,例如“Hey”,效果很好。 我猜它與ValueError有關。 為什么 pandas 不讓我將其分配為列表?

非常感謝您的幫助和解釋。

您是否希望apply split行應用於列表中的每個值?

import pandas as pd
df = pd.DataFrame({'Name' : ['John', 'Kate'],
              'Hobbies' : ["Hobby1, Hobby2", "Hobby2, Hobby3"]})
df['Hobbies'] = df['Hobbies'].apply(lambda x: x.split(','))
df

或者如果你不是一個大的 lambda exer,那么你可以在整個列上做str.split() ,這更容易:

import pandas as pd
df = pd.DataFrame({'Name' : ['John', 'Kate'],
              'Hobbies' : ["Hobby1, Hobby2", "Hobby2, Hobby3"]})
df['Hobbies'] = df['Hobbies'].str.split(",")
df

Output:

    Name    Hobbies
0   John    [Hobby1, Hobby2]
1   Kate    [Hobby2, Hobby3]

另一種方法

df=pd.DataFrame({'hobbiesStrings':['"hobby1, hobby2"']})
df

,whitespace替換為","並將hobbiesStrings值放入列表中

x=df.hobbiesStrings.str.replace('((?<=)(\,\s+)+)','","').values.tolist()

x

在這里我使用正則表達式基本上我用","替換comma \,然后是空格\s

使用df.assign重寫列

df=df.assign(hobbies_stringsnes=[x])

連在一起

 df=df.assign(hobbies_stringsnes=[df.hobbiesStrings.str.replace('((\,\s))','","').values.tolist()])
df

Output

在此處輸入圖像描述

使用“at”方法將值替換為列表

import pandas as pd
# create a dataframe
df = pd.DataFrame(data={'Name': ['Stinky', 'Lou'], 
                        'Hobbies': ['Shooting Sports', 'Poker']})
# replace Lous hobby of poker with a list of degen hobbies with the at method
df.at[1, 'Hobbies'] = ['Poker', 'Ponies', 'Dice']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM