python - 有选择地替换 DataFrames 列名称

标签 python pandas

我在 .csv 文件中有一个时间序列数据集,我想用 Pandas 处理它(使用 Canopy)。文件中的列名称是字符串和同位素数字的混合。

    cycles      40   38.02   35.98      P4
0        1  1.1e-8  4.4e-8  7.7e-8  8.8e-7
1        2  2.2e-8  5.5e-8  8.8e-8  8.7e-7
2        3  3.3e-8  6.6e-8  9.9e-8  8.6e-7

我希望这个 DataFrame 看起来像这样

    cycles      40      38      36      P4
0        1  1.1e-8  4.4e-8  7.7e-8  8.8e-7
1        2  2.2e-8  5.5e-8  8.8e-8  8.7e-7
2        3  3.3e-8  6.6e-8  9.9e-8  8.6e-7

.csv 文件并不总是具有完全相同的列名称;每个文件的数字可能略有不同。为了处理这个问题,我对列名进行了采样,并将值四舍五入到最接近的整数。这是我的代码到目前为止的样子:

import pandas as pd
import numpy as np

df = {'cycles':[1,2,3],'40':[1.1e-8,2.2e-8,3.3e-8],'38.02':[4.4e-8,5.5e-8, 6.6e-8],'35.98':[7.7e-8,8.8e-8,9.9e-8,],'P4':[8.8e-7,8.7e-7,8.6e-7]}
df = pd.DataFrame(df, columns=['cycles', '40', '38.02', '35.98', 'P4'])

colHeaders = df.columns.values.tolist()
colHeaders[1:4] = list(map(float, colHeaders[1:4]))
colHeaders[1:4] = list(map(np.around, colHeaders[1:4]))
colHeaders[1:4] = list(map(int, colHeaders[1:4]))
colHeaders = list(map(str, colHeaders))

我尝试了 df.rename(columns={df.loc[ 1 ]:colHeaders[ 0 ]}, ...),但出现此错误:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

我已阅读 this帖子以及 pandas 0.17 文档,但我不知道如何使用它来选择性地替换列名称,而不需要我手动分配新的列名称,如 this post .

我对 Python 相当陌生,之前从未在 StackOverflow 上发过帖子,因此我们将不胜感激。

最佳答案

您可以使用方法的变体,但直接分配新列:

>>> cols = list(df.columns)
>>> cols[1:-1] = [int(round(float(x))) for x in cols[1:-1]]
>>> df.columns = cols
>>> df
   cycles            40            38            36            P4
0       1  1.100000e-08  4.400000e-08  7.700000e-08  8.800000e-07
1       2  2.200000e-08  5.500000e-08  8.800000e-08  8.700000e-07
2       3  3.300000e-08  6.600000e-08  9.900000e-08  8.600000e-07
>>> df.columns
Index(['cycles', 40, 38, 36, 'P4'], dtype='object')

或者您可以传递一个函数来重命名:

>>> df = df.rename(columns=lambda x: x if x[0].isalpha() else int(round(float(x))))
>>> df.columns
Index(['cycles', 40, 38, 36, 'P4'], dtype='object')

关于python - 有选择地替换 DataFrames 列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33704023/

相关文章:

python - 将 XML 值存储为 Python 列表

python - pandas - 对 nunique 值进行分组和计数

python - 删除 groupby 中的第 n 行

python - 不使用循环遍历列表

python - 3000 keyhash 的 Redis 值获取大约需要 10 秒(python 3.5)

python - Pandas 和 Plotly : how to access data columns in the hover text that are not used to plot the point?

python - 同时循环测试和训练集

python - Pandas 结合两个分组依据,过滤并合并分组(计数)

python - 如何在最大值索引 idxmax() 之前找到索引?

python selenium无法使用cookie登录youtube帐户