Pandas中存在相同列名的多个列
在本文中,我们将介绍在快速处理数据时,可能会遇到的一种情况——Pandas中存在相同列名的多个列,并探讨如何处理这种情况。
在某些情况下,可能需要在同一DataFrame中包含多个相同名字的列,例如:包含一个城市和它所在国家的数据集。此时数据集可能会包含“城市”列和“国家”列,这两列都会包含“北京”、“伦敦”、“巴黎”等等城市的数据。下面就来演示一下这种情况:
import pandas as pd
data = {"城市": ["北京", "伦敦", "巴黎"],
"国家": ["中国", "英国", "法国"],
"人口": [2100, 900, 2200]}
df = pd.DataFrame(data)
df
城市 | 国家 | 人口 | |
---|---|---|---|
0 | 北京 | 中国 | 2100 |
1 | 伦敦 | 英国 | 900 |
2 | 巴黎 | 法国 | 2200 |
观察数据集可以看出,其中的“城市”和“国家”列均包含多个相同的城市或国家。那么当我们需要查找“北京”这个城市对应的国家时,应该如何操作呢? | |||
首先,可以通过df 的列名访问到这两个被重命名的列。例如,我们可以通过以下代码访问“城市”列: |
df["城市"]
0 北京
1 伦敦
2 巴黎
Name: 城市, dtype: object
如果要获取“国家”列中所有元素是“中国”的所有行:
df[df["国家"]=="中国"]
| | 城市 | 国家 |人口|
|—| — | — | — |
|0 | 北京 | 中国 | 2100|
从上面的例子中可以看出,可以通过选择数据框的列,对相同名称的列进行操作。下面介绍几种可以应对这种情况的方法。
阅读更多:Pandas 教程
方法一:使用索引
可以通过使用.iloc
或.loc
方法,利用它们提供的支持整数或标签索引的功能,访问相同名称的列。例如,我们可以通过以下代码访问其中的“城市”列:
df.iloc[:,0]
0 北京
1 伦敦
2 巴黎
Name: 城市, dtype: object
df.loc[:, "城市"]
0 北京
1 伦敦
2 巴黎
Name: 城市, dtype: object
如果要同时选择“城市”和“国家”列,可以使用整数索引:
df.iloc[:, [0,1]]
或者标签索引:
df.loc[:, ["城市", "国家"]]
两种方法都会返回以下结果:
城市 | 国家 | |
---|---|---|
0 | 北京 | 中国 |
1 | 伦敦 | 英国 |
2 | 巴黎 | 法国 |
方法二:使用别名
Pandas中允许我们在创建DataFrame时指定列名的别名。这样,我们可以在DataFrame中为每个数据列指定一个唯一的名称,避免重复。以下示例代码展示了如何为DataFrame指定别名:
data = {"city": ["北京", "伦敦", "巴黎"],
"country": ["中国", "英国", "法国"],
"population": [2100, 900, 2200]}
df = pd.DataFrame(data, columns=["city", "country", "population"])
df
| | city | country | population |
|—| — | — | — |
|0 | 北京 | 中国 | 2100|
|1 | 伦敦 | 英国 | 900 |
|2 | 巴黎 | 法国 | 2200|
可以看到,这样DataFrame中不存在相同列名的问题。
方法三:使用多重索引
另一种处理相同列名的多个列的方法是,使用Pandas的多重索引。多重索引提供了一种在DataFrame中表示多个维度的数据的方法,它允许用一个数组来表示多个层级的行或列。以下示例代码展示了如何使用多重索引处理相同列名的多个列:
data = {"index": [0,1,2],
"城市": ["北京", "伦敦", "巴黎"],
"国家": ["中国", "英国", "法国"],
"人口": [2100, 900, 2200]}
# 将“index”列设置为索引
df = pd.DataFrame(data).set_index("index")
# 创建多重索引
df.columns = pd.MultiIndex.from_tuples([(col.replace("城市", "city"), col.replace("国家", "country"), col.replace("人口", "population")) for col in df.columns])
df
| | city | country | population |
|— | — | — | — |
| | 城市 | 国家 | 人口 |
| index| | | |
| 0 | 北京 | 中国 |2100|
| 1 | 伦敦 | 英国 |900 |
| 2 | 巴黎 | 法国 |2200|
可以看到,使用多重索引后,DataFrame中的列的名称变成了由多个层级组成的元组,这样就可以处理相同列名的多个列了。使用多重索引查询“城市”列中的数据,代码如下:
df["city"]
| | |
|—| — |
|0 | 北京 |
|1 | 伦敦 |
|2 | 巴黎 |
查询“国家”列中所有元素是“中国”的所有行,代码如下:
df[df[("country", "")]=="中国"]
city | country | population | |
---|---|---|---|
index | |||
0 | 北京 | 中国 | 2100 |
总结
本文介绍了Pandas中存在相同列名的多个列的情况,并探讨了三种处理这种情况的方法:使用索引、使用别名和使用多重索引。根据不同的数据集和需求,可以选择合适的方法来处理相同列名的多个列,以更加高效地处理数据。