重命名包含十进制单元格值的列

时间:2014-09-03 20:32:14

标签: python pandas

我有一个pandas数据帧:

import pandas as pd
import numpy as np

data = {'name': ['Bill', np.nan, 'Tony', 'Koli', 'Sally'], 
    'score': [42.32, np.nan, 36.3, 24.522, 73.1], 
    'age': [2, np.nan, 8, 4, 11]}
df = pd.DataFrame(data, columns = ['name','score', 'age'])
df

如果数据名称包含缺失值或十进制数字,我希望将数据名称['得分']更改为数据[' score_decimal']。

在伪代码中:

for each column in df:
    if column contains np.nan's or decimals:
        then column.name = column.name + '_decimal'
    else:
        do nothing

我可以进行基本循环,但我不能进行正则表达式搜索(" if"循环中的行)

3 个答案:

答案 0 :(得分:1)

这是缺失的部分吗?

contains_nan_dec = False
for value in df['score'].unique():
    if value.isdigit() or value is np.nan:
        contains_nan_dec = True
        break
if contains_nan_dec: # pseudocode starts here
    then column.name = column.name + '_decimal'
else:
    do nothing

答案 1 :(得分:0)

我相信检索每列的值更容易,检查小数位数或NaN,然后​​更改列名。首先,我将创建一个函数来进行检查

def check(list):
    for elem in list:
        if type(elem) != type('a'):
            if type(elem) == type(1.1) or np.isnan(elem):
                return True
    return False

然后我会做类似

的事情
labels = list(df.columns)

for i in xrange(len(labels)):
    if check(list(df[labels[i]])):
        labels[i] += '_decimal'
df.columns = labels

重命名列

答案 2 :(得分:0)

你可以非常简洁地这样做:

float_columns = df.columns[df.dtypes == 'float64']
new_names = {old_name: old_name + '_decimal' for old_name in float_columns}
df = df.rename(columns=new_names)

numpy.nan也被视为float64,因此也会涵盖此案例。