Pandas 获取部分数据框并标准化值

Posted

技术标签:

【中文标题】Pandas 获取部分数据框并标准化值【英文标题】:Pandas to take portions of data-frame and normalize values 【发布时间】:2019-12-28 12:50:03 【问题描述】:

如下两列的数据框。

我想通过给出日期来选择部分,并规范化(通过使用 min-max 方法)“重量”。

这是我的计划:

import pandas as pd


data = 'Date': ["2000-02-01", "2000-03-01", "2000-04-03", "2000-05-01", "2000-06-01", "2000-07-03", "2000-08-01", "2000-09-01", "2000-10-02", "2000-11-01"], 
'Weight' : [478, 26, 144, 9, 453, 24, 383, 314, 291, 286]

df = pd.DataFrame(data)

df_1 = df.loc[df['Date'] >= "2000-04-01"]

df_1 = (df_1 - df_1.min()) / (df_1.max() - df_1.min())

print df_1

# the ideal output is two columns: 1 for Dates after "2000-04-01". 1 for their correspondent normalized "Weights". 

报错:

TypeError: unsupported operand type(s) for -: 'str' and 'str'

我怎样才能实现它?谢谢。

【问题讨论】:

日期是字符串,你应该先将它们转换为datetime对象。 df['Date']=pd.to_datetime(df['Date']) 查找其他问题以了解有关转换的更多信息 您用于“规范化”的逻辑是什么?我不清楚。您是否希望列Weight 在特定输出之后相同?如果您粘贴预期的输出,那将非常有用。 【参考方案1】:

首先将值转换为日期时间,然后只处理Weight 列并覆盖Weight 列:

df['Date']  = pd.to_datetime(df['Date'] )
df_1 = df.loc[df['Date'] >= "2000-04-01"]

a = (df_1['Weight'] - df_1['Weight'].min()) / (df_1['Weight'].max() - df_1['Weight'].min())

print (df_1.assign(Weight = a))
        Date    Weight
2 2000-04-03  0.304054
3 2000-05-01  0.000000
4 2000-06-01  1.000000
5 2000-07-03  0.033784
6 2000-08-01  0.842342
7 2000-09-01  0.686937
8 2000-10-02  0.635135
9 2000-11-01  0.623874

【讨论】:

晚安,先生!感谢您的知识分享和帮助!【参考方案2】:

日期列的数据类型是字符串。所以你必须将它更改为。你可以使用这种方法==>

df['Date']=pd.to_datetime(df['Date'])

【讨论】:

以上是关于Pandas 获取部分数据框并标准化值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:将 DataFrame 与嵌套数组结合或合并 JSON 输出

Pandas 中的非标准化数据框

pandas使用groupby函数agg函数获取每个分组聚合对应的标准差(std)实战:计算分组聚合单数据列的标准差(std)计算分组聚合多数据列的标准差(std)

ArcGIS风暴CASS建立标准分幅图框并在ArcGIS中DOM批量分幅案例教程

ArcGIS风暴CASS建立标准分幅图框并在ArcGIS中DOM批量分幅案例教程

如何使用 Pandas 中的数据透视表计算标准差?