我有一个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"循环中的行)
答案 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
,因此也会涵盖此案例。