我想创建一个新列,并根据 Dataframe 的其他列值计算值。输入数据是一个大型的.csv文件,其中包含多年来每天每小时的温度值。 Dataframe 如下所示:
HH T date t_min t_max
0 8 94.0 1991-04-01 81 110
1 9 90.0 1991-04-01 81 110
2 10 95.0 1991-04-01 81 110
3 11 108.0 1991-04-01 81 110
4 12 110.0 1991-04-01 81 110
5 13 109.0 1991-04-01 81 110
6 14 81.0 1991-04-01 81 110
7 15 85.0 1991-04-01 81 110
8 16 85.0 1991-04-01 81 110
9 17 87.0 1991-04-01 81 110
HH =小时; T =小时温度;t_min =一天中的最低温度;t_max =最高日温
我尝试使用以下代码计算新列“HTD”(每小时温度偏差):
import pandas as pd
df_t = pd.read_csv('file.csv')
# calcualation = ( Tu - Tmin ) / ( Tmax - Tmin ) * (Tmax - Tmin)
df_t[ 'HTD'] = (df_t.T - df_t.t_min) / (df_t.t_max - df_t.t_min) * (df_t.t_max - df_t.t_min)
这将导致类型错误:- 不支持的操作数类型:'str'和'int'在最后一行。问题似乎出在T列,因为当我使用df_t.t_min而不是df_t. T时,代码运行。我检查了T列的数据:
#First check: 0 values
df_t.isnull().sum()
#Second check: non-numerical values:
result = df_t.applymap(np.isreal)
for value in result['T']:
if value == False:
print(value)
它没有显示空值,也没有报告非数字值。我还尝试使用.astype()来确保数据是正确的类型。
尝试解决此问题的最佳方案是什么?(如果我的问题不完整或不清楚,请道歉,这是我第一次提出此问题)
2条答案
按热度按时间qyswt5oh1#
通常你可以使用
df.<colname>
作为df['colname']
的快捷方式,但是df.T是Pandas中的property,它返回 Dataframe 的转置(行变成列,列变成行)。举个简单的例子:
只需使用方括号访问列即可解决此问题:
或者通过重命名你的列,使其不与内置的panda数据框属性或方法冲突(其他例子包括df.shape,df.size等;使用
dir(df)
查看所有潜在的碰撞!)一般来说,方括号访问是安全的,如果有点不方便,因为你将保证永远不会冲突的名称。我会坚持.attribute访问只是作为一个快捷方式或名称,我肯定不会冲突(列与大写名称的例子)
umuewwlo2#
不要使用df_t.T,它会调换 Dataframe ,解决方法如下: