pandas - 不区分大小写的 pandas.concat

标签 pandas

我将如何执行不区分大小写的 pandas.concat?

df1 = pd.DataFrame({"a":[1,2,3]},index=["a","b","c"])
df2 = pd.DataFrame({"b":[1,2,3]},index=["a","b","c"])
df1a = pd.DataFrame({"A":[1,2,3]},index=["A","B","C"])

pd.concat([df1, df2],axis=1)
   a  b
a  1  1
b  2  2
c  3  3

但这不起作用:
pd.concat([df1, df1a],axis=1)

    a   A
A NaN   1
B NaN   2
C NaN   3
a   1 NaN
b   2 NaN
c   3 NaN

是否有捷径可寻?

我对 Series 上的 concat 有同样的问题.

这适用于 DataFrame :
pd.DataFrame([11,21,31],index=pd.MultiIndex.from_tuples([("A",x) for x in ["a","B","c"]])).rename(str.lower)

但这不适用于 Series :
pd.Series([11,21,31],index=pd.MultiIndex.from_tuples([("A",x) for x in ["a","B","c"]])).rename(str.lower)
TypeError: descriptor 'lower' requires a 'str' object but received a 'tuple'

如需重命名,DataFrames用:
def rename_axis(self, mapper, axis=1):
        index = self.axes[axis]
        if isinstance(index, MultiIndex):
            new_axis = MultiIndex.from_tuples([tuple(mapper(y) for y in x) for x in index], names=index.names)
        else:
            new_axis = Index([mapper(x) for x in index], name=index.name)

而重命名时 Series :
result.index = Index([mapper_f(x) for x in self.index], name=self.index.name)

所以我更新的问题是如何使用系列执行重命名/不区分大小写的连接?

最佳答案

您可以通过 rename 执行此操作:

pd.concat([df1, df1a.rename(index=str.lower)], axis=1)

编辑 :

如果你想用 MultiIndex 来做到这一点编辑 Series你现在需要手动设置它。有a bug report在等待修复的 pandas GitHub 存储库(感谢 @ViktorKerkez)。
s.index = pd.MultiIndex.from_tuples(s.index.map(lambda x: tuple(map(str.lower, x))))

您可以更换 str.lower使用您想用来重命名 index 的任何函数.

请注意,您不能使用 reindex通常在这里,因为它尝试使用重命名的索引查找值,因此它将返回 nan值,除非您的 rename结果对原始 index 没有任何更改.

关于pandas - 不区分大小写的 pandas.concat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18305067/

相关文章:

python - 将 Pandas 中的各种持续时间文本字段转换为秒

python - 来自带有列表的字典的 Pandas DataFrame

Python 3.x - 创建数据框并指定列名称

python - 如何修复 "DeprecationWarning: DataFrames with non-bool types result in worse computationalperformance..."

python - 在取其他列表的平均值时不能删除带有空列表的行

Python - 从多个 Zip 文件中提取 CSV 文件并合并数据

python - Pandas:如何通过最接近的索引匹配来组合两个数据帧?

python - Pandas groupby 并在列表中获取字典

python - 如何检查所有元素是否属于一组?

python - Pandas 数据框问题。不知道如何清理和管理一种 block 状矩阵