python-3.x - 使用 .apply() 创建列 带有字符串的 Pandas
问题描述
我有一个 Dataframe df
。
其中一列被命名Adress
并包含一个字符串。
我创建了一个函数processing(string)
,它以字符串 a 作为参数返回该字符串的一部分。
我成功地将函数应用于 df 并在其中创建了一个新列df
:
df.loc[:, 'new_col_name`] = df.loc[:, 'Adress`].apply(processing)
我以返回两个字符串的方式修改了我的函数processing(string)
。我希望返回的第二个字符串存储在另一个新列中。为此,我尝试按照中给出的步骤:通过应用具有多个返回的函数创建多个熊猫数据框列
这是我的功能的一个例子processing(string)
:
def processing(string):
#some processing
return [A_string, B_string]
我还尝试在 a 中返回两个字符串tuple
。
以下是我尝试将该函数应用于我的 df 的不同方法:
df.loc[:, '1st_new_col'], df.loc[:, '2nd_new_col'] = df.loc[:, 'Adress'].apply(processing)
>>> ValueError: too many values to unpack (expected 2)
#or
df.loc[:, '1st_new_col'], df.loc[:, '2nd_new_col'] = df.loc[:, 'Adress'].astype(str).apply(processing)
>>> ValueError: too many values to unpack (expected 2)
#or
df.loc[:, ['1st_new_col', '2nd_new_col']] = df.loc[:, 'Adress'].apply(processing)
>>> KeyError: "None of [Index(['1st_new_col', '2nd_new_col'], dtype='object')] are in the [columns]"
#or
df.loc[:, ['1st_new_col', '2nd_new_col']] = df.loc[:, 'Adress'].apply(processing, axis=1)
>>> TypeError: processing() got an unexpected keyword argument 'axis'
#or
df.loc[:, ['1st_new_col', '2nd_new_col']] = df.apply(lambda x: processing(x['Adress'], axis=1)
>>> KeyError: "None of [Index(['1st_new_col', '2nd_new_col'], dtype='object')] are in the [columns]"
#or
df.loc[:, ['1st_new_col', '2nd_new_col']] = df.apply(lambda x: processing(x['Adress'].astype(str), axis=1)
>>> AttributeError: 'str' object has no attribute 'astype'
#This is the only Error I could understand
#or
df.loc[:, ['1st_new_col', '2nd_new_col']] = df.apply(lambda x: processing(x['Adress'])
>>> KeyError: 'Adress'
我想我很接近,但我不知道如何获得它。
解决方案
尝试:
df["Adress"].apply(process)
此外,最好pd.Series
在apply
函数中返回 a 。
这里有一个例子:
# build example dataframe
df = pd.DataFrame(data={'Adress' : ['Word_1_1 Word_1_2','Word_2_1 Word_2_2','Word_3_1 Word_3_2','Word_4_1 Word_4_2']})
print(df)
# Adress
# 0 Word_1_1 Word_1_2
# 1 Word_2_1 Word_2_2
# 2 Word_3_1 Word_3_2
# 3 Word_4_1 Word_4_2
# Define your own function : here return two elements
def process(my_str):
l = my_str.split(" ")
return pd.Series(l)
# Apply the function and store the output in two new columns
df[["new_col_1", "new_col_2"]] = df["Adress"].apply(process)
print(df)
# Adress new_col_1 new_col_2
# 0 Word_1_1 Word_1_2 Word_1_1 Word_1_2
# 1 Word_2_1 Word_2_2 Word_2_1 Word_2_2
# 2 Word_3_1 Word_3_2 Word_3_1 Word_3_2
# 3 Word_4_1 Word_4_2 Word_4_1 Word_4_2
推荐阅读
- javascript - javascript 文件中的 php 常量 | 在 JS 中添加 PHP
- java - 如何更改不同鼠标运动事件的文本颜色?
- excel - 如何获取对 TextBox 本身的引用,而不是 Excel vba 中的默认值?
- ssis - SSIS - 如何在“”中插入所有值
- java - Jetty HttpClient 代理身份验证配置 (NTLM)
- amazon-web-services - 使用多维数组调用 AWS 中的端点
- android - 如何兼容Android10.0 Wi Fi连接“addnetwork”方法返回-1?
- flutter - 颤动中的单选按钮活动颜色不起作用
- python - 在python中,我可以在两个文件夹(名称)之间使用特殊字符匹配文件名的一部分,然后将找到的匹配复制到第二个文件夹中吗?
- flutter - Flutter Permission Denial:打开提供程序 org.chromium.chrome.browser.util.ChromeFileProvider