使用python遍历列中的元素以进行预处理

时间:2019-10-19 04:25:25

标签: python pandas loops machine-learning jupyter

我一直在使用外壳上的数据集进行机器学习。 在尝试减小数据集的维度时,我想将2列即yr_built和yr_renovated合并到新列“ age”(房屋)。

我正在尝试从2个预定义列((year_built)和(year_renovated))创建新的列年龄。装修年份的列具有年份(例如,如果装修则为1991)或如果未装修则为0。

我要在此处使用的逻辑是,如果进行了翻新,则建筑的年龄就是当前的翻新年份-

[年龄= 2019-年装修]

如果未进行过装修:建筑物的年龄为当年-建造年,即

[年龄= 2019-年建成]

the image of the ppnew data is displayed in following picture

我已经尝试过使用for循环,其代码如下:

[enter image description here][1]

for i in pp['age']:
    if pp['yr_renovated'] = 0:
        ppnew['age'] = 2019 - pp['yr_built']
    else:
       ppnew['age'] = 2019 - pp['yr_renovated']

我也尝试使用

for i in pp['age']:
    if pp['yr_renovated'] == 0: #truth value
        ppnew['age'] = 2019 - pp['yr_built']
    else:
       ppnew['age'] = 2019 - pp['yr_renovated']

错误提示布尔错误

plz代码帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

我不确定您想要达到什么目标(如果有所不同,请向问题中添加预期的输出),但在我看来是这样的:

import pandas as pd
import numpy as np
import time
np.random.seed(1)

nRows = 25000
nCols = 10000
numberOfChunks = 5

df = pd.DataFrame(index=range(nRows ), columns=range(1))

df2 = df.apply(lambda row: np.random.rand(nCols), axis=1)

for start, stop in zip(np.arange(0, nRows , int(round(nRows/float(numberOfChunks)))), 
                       np.arange(int(round(nRows/float(numberOfChunks))), nRows +  int(round(nRows/float(numberOfChunks))), int(round(nRows/float(numberOfChunks))))):
    df2tmp = df2.iloc[start:stop]
    if start == 0:
        df3 = pd.DataFrame(df2tmp.tolist(), index=df2tmp.index).astype('float16')
        continue
    df3tmp =  pd.DataFrame(df2tmp.tolist(), index=df2tmp.index).astype('float16')
    df3 = pd.concat([df3, df3tmp])

我认为import numpy as np ppnew['age1'] = np.where(pp['yr_renovated']==0, 2019 - pp['yr_built'] , 2019 - pp['yr_renovated']) 数据帧已经存在。