gpt4 book ai didi

python - 导入多索引数据而不创建整数列名称

转载 作者:行者123 更新时间:2023-12-01 08:56:16 25 4
gpt4 key购买 nike

我在从具有嵌套列标题的 Excel 文件导入数据时遇到问题。有几个列名称是整数,我希望将它们作为字符串。

假设我在 Excel 中有这个表格:

|     | 1                 | string_name       |                   |
|-----|-------------------|-------------------|-------------------|
| cat | value1 | value2 | value3 |
| A | 0,972040109825603 | 0,056557228055112 | 0,976955685101913 |
| B | 0,320747613034341 | 0,149341390123682 | 0,638191659714267 |
| C | 0,790582690075218 | 0,72042597879107 | 0,001334403836215 |
| D | 0,536830294783296 | 0,374625041462985 | 0,400407699629966 |
| E | 0,407865892894399 | 0,622162974355068 | 0,374418521692358 |

我将其导入为数据框

df = pd.read_excel('expl.xlsm', header=[0, 1])

print(df)

这给出了

            1           string_name
cat value1 value2 value3
A 0.972040 0.056557 0.976956
B 0.320748 0.149341 0.638192
C 0.790583 0.720426 0.001334
D 0.536830 0.374625 0.400408
E 0.407866 0.622163 0.374419

输入:

df.columns

输出:

MultiIndex(levels=[[1, 'string_name'], ['value1', 'value2', 'value3']],
labels=[[0, 0, 1], [0, 1, 2]],
names=[None, 'cat'])

所以我想将 1 转换为 '1'。或者理想情况下首先导入仅包含字符串类型列名称的数据框。

我通过

获取第一级的列值
df.columns.get_level_values(0)

输出:

Index([1, 1, 'string_name'], dtype='object')

但是

df.columns.get_level_values(0) = df.columns.get_level_values(0).astype(str)

返回错误:

df.columns.get_level_values(0) = df.columns.get_level_values(0).astype(str)                                                                        

SyntaxError: can't assign to function call

如何更改列名称的数据类型或导入仅包含字符串列标题的数据?

最佳答案

您需要创建新的MultiIndex并分配回来:

a = df.columns.get_level_values(0).astype(str)
b = df.columns.get_level_values(1)

df.columns = pd.MultiIndex.from_arrays([a,b], names=df.columns.names)

print (df.columns)
MultiIndex(levels=[['1', 'string_name'], ['cat', 'value1', 'value2']],
labels=[[0, 0, 1], [0, 1, 2]],
names=[None, 'cat'])

如果想要仅过滤 MultiIndex 第一级中的字符串值,可以创建 bool 掩码并按 boolean indexing 进行过滤与 loc :

mask = df.columns.get_level_values(0).map(lambda x: isinstance(x, str))

df1 = df.loc[:, mask]
print (df1)
string_name
value2
A 0.976956
B 0.638192
C 0.001334
D 0.400408
E 0.374419

关于python - 导入多索引数据而不创建整数列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52755212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com