如何连接Pandas DataFrame中的列值?

2021年9月19日23:01:01 发表评论 815 次浏览

在这个简短的指南中,你将看到如何在 Pandas DataFrame 中连接列值。

如何连接Pandas DataFrame中的列值?首先,你可以使用此模板连接列值(仅适用于字符串):

df['New Column Name'] = df['1st Column Name'] + df['2nd Column Name'] + ...

请注意,加号 ('+') 用于执行连接。

另请注意,例如,如果你的数据集包含整数和字符串的组合 ,并且你尝试使用上述模板,则会收到此错误:

TypeError: ufunc ‘add’ did not contain a loop with signature matching types

你可以通过使用以下语法将值映射到字符串来绕过此错误:

df['New Column Name'] = df['1st Column Name'].map(str) + df['2nd Column Name'].map(str) + ...

接下来,你将看到以下 3 个示例以及连接Pandas DataFrame中的列值的方法,它们演示了如何在 Pandas DataFrame 中连接列值:

  • 示例 1:在单个 DataFrame 下连接值
  • 示例 2:连接来自两个单独 DataFrame 的列值
  • 示例 3:连接值,然后找到最大值

示例 1:在单个 DataFrame 下连接值

假设你有以下包含 3 列的数据集:

DayMonthYear
1Jun2016
2Jul2017
3Aug2018
4Sep2019
5Oct2020

目标是连接列值,如下所示:

Day-Month-Year

首先,你需要创建一个 DataFrame以在 Python 中捕获上述值。你可以使用以下代码来创建 DataFrame:

import pandas as pd 

data = {'Day': [1,2,3,4,5], 
        'Month': ['Jun','Jul','Aug','Sep','Oct'], 
        'Year': [2016,2017,2018,2019,2020]} 

df = pd.DataFrame(data, columns= ['Day','Month','Year'])
print (df)

这是 DataFrame 的样子:

   Day Month  Year
0    1   Jun  2016
1    2   Jul  2017
2    3   Aug  2018
3    4   Sep  2019
4    5   Oct  2020

接下来,应用以下语法来执行连接(使用“-”作为分隔符):

df['Full Date'] = df['Day'].map(str) + '-' + df['Month'].map(str) + '-' + df['Year'].map(str)

连接Pandas DataFrame中的列值示例 - 你完整的 Python 代码如下所示:

import pandas as pd 

data = {'Day': [1,2,3,4,5], 
        'Month': ['Jun','Jul','Aug','Sep','Oct'], 
        'Year': [2016,2017,2018,2019,2020]} 

df = pd.DataFrame(data, columns= ['Day','Month','Year']) 

df['Full Date'] = df['Day'].map(str) + '-' + df['Month'].map(str) + '-' + df['Year'].map(str)
print (df)

运行代码,你将获得连接的完整日期(以黄色突出显示):

   Day Month  Year   Full Date
0    1   Jun  2016  1-Jun-2016
1    2   Jul  2017  2-Jul-2017
2    3   Aug  2018  3-Aug-2018
3    4   Sep  2019  4-Sep-2019
4    5   Oct  2020  5-Oct-2020

示例 2:连接来自两个单独 DataFrame 的列值

如何连接Pandas DataFrame中的列值?现在你将看到如何连接来自两个单独 DataFrame 的列值。

在前面的示例中,你看到了如何基于此数据创建第一个 DataFrame:

DayMonthYear
1Jun2016
2Jul2017
3Aug2018
4Sep2019
5Oct2020

现在让我们根据以下数据创建第二个 DataFrame:

失业率利率
5.51.75
51.5
5.21.25
5.11.5
4.92

连接Pandas DataFrame中的列值的方法:目标是连接来自两个 DataFrame 的值,如下所示:

日-月-年:失业率;利率

要实现此目标,你可以应用以下 Python 代码,连接Pandas DataFrame中的列值示例如下:

import pandas as pd 

data1 = {'Day': [1,2,3,4,5], 
         'Month': ['Jun','Jul','Aug','Sep','Oct'], 
         'Year': [2016,2017,2018,2019,2020]} 

df1 = pd.DataFrame(data1, columns= ['Day','Month','Year']) 

data2 = {'Unemployment Rate': [5.5,5,5.2,5.1,4.9], 
         'Interest Rate': [1.75,1.5,1.25,1.5,2]} 

df2 = pd.DataFrame(data2, columns= ['Unemployment Rate','Interest Rate'])

combined_values = df1['Day'].map(str) + '-' + df1['Month'].map(str) + '-' + df1['Year'].map(str) + ': ' + 'Unemployment: ' + df2['Unemployment Rate'].map(str) + '; ' + 'Interest: ' + df2['Interest Rate'].map(str)
print (combined_values)

一旦你运行了 Python 代码,你就会得到这样的结果:

0    1-Jun-2016: Unemployment: 5.5; Interest: 1.75
1     2-Jul-2017: Unemployment: 5.0; Interest: 1.5
2    3-Aug-2018: Unemployment: 5.2; Interest: 1.25
3     4-Sep-2019: Unemployment: 5.1; Interest: 1.5
4     5-Oct-2020: Unemployment: 4.9; Interest: 2.0

示例 3:连接值,然后找到最大值

连接Pandas DataFrame中的列值的方法:在最后一个示例中,你将看到如何连接下面的 2 个 DataFrame(仅包含数值),然后找到最大值。

如何连接Pandas DataFrame中的列值?本练习的目的是证明你可以在连接 2 个单独的 DataFrame 后应用不同的算术/统计运算。

第一个 DataFrame 将包含这组数字:

data1 = {'Set1': [55,22,11,77,33]} 
df1 = pd.DataFrame(data1, columns= ['Set1']) 

虽然第二个 DataFrame 将包含这组数字:

data2 = {'Set2': [23,45,21,73,48]} 
df2 = pd.DataFrame(data2, columns= ['Set2'])

然后,你可以连接这 2 个 DataFrame,然后使用以下代码找到最大值,连接Pandas DataFrame中的列值示例如下:

import pandas as pd 

data1 = {'Set1': [55,22,11,77,33]} 
df1 = pd.DataFrame(data1, columns= ['Set1']) 

data2 = {'Set2': [23,45,21,73,48]} 
df2 = pd.DataFrame(data2, columns= ['Set2'])

concatenated = df1['Set1'].map(str) + df2['Set2'].map(str)

combined = pd.DataFrame(concatenated, columns=['Combined Values'])
max1 = combined['Combined Values'].max()

print (max1)

你会得到的结果是7773,这确实是最大值:

7773

要了解有关 Pandas DataFrame 的更多信息,你可以查看Pandas 文档

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: