繁体   English   中英

Dataframe 添加的新列不断消失

[英]New column added to Dataframe keeps dissapearing

我需要清理我的数据,在那里我删除了有缺陷的行。 为此,我创建了一个 Day_number 列来保存要在过滤中使用的天数。

df = pd.read_csv(file_loc)
cols = list(df.columns.values)
cols
df = df[[cols[-1]]+ [cols[9]]]
df.rename(columns={'mean-ghi': 'GHI'}, inplace = True)
df_filtered_nan = df.drop(df[df.GHI.isnull()].index)
df_filtered_nan['Day_number'] = df.Datetime.apply(lambda x: x.day)
df_filtered_nan.reset_index(drop = True, inplace = True)

这导致 df_filtered_nan 的以下 dataframe : df_filtered_nan 的数据框

但是,当我执行过滤步骤时,由于某种原因 Day_number 列消失了,并且出现属性错误。

months_days_killed_count = {}
days_killed_count = 0
for day in df_filtered_nan.Day_number.unique():
    daywise = len(df_filtered_nan[df_filtered_nan.Day_number == day])
    print(daywise)
    if daywise != 1440:
        df_filtered_nan = df.drop(df_filtered_nan[df_filtered_nan.Day_number == day].index)
        days_killed_count += 1
    else:
        continue
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-117-c78d4b39ef13> in <module>
     24 days_killed_count = 0
     25 for day in df_filtered_nan.Day_number.unique():
---> 26     daywise = len(df_filtered_nan[df_filtered_nan.Day_number == day])
     27     print(daywise)
     28     if daywise != 1440:

D:\Anaconda\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
   5137             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   5138                 return self[name]
-> 5139             return object.__getattribute__(self, name)
   5140 
   5141     def __setattr__(self, name: str, value) -> None:

AttributeError: 'DataFrame' object has no attribute 'Day_number'

现在当我打印 df_filtered_nan dataframe 我得到: 过滤后打印的 df_filtered_nan 数据帧

所以,我一辈子都无法弄清楚我做错了什么。 请帮忙:)

在这一行

df_filtered_nan = df.drop(df_filtered_nan[df_filtered_nan.Day_number == day].index)

您正在从df不是df_filtered_nan drop ping 行并将其分配回df_filtered_nan 因此, if命中并执行此行, df_filtered_nan就会成为df的裁剪版本,它没有Day_number列; 因此在for循环的下一轮出现错误。

你可能需要

df_filtered_nan = df_filtered_nan.drop(df_filtered_nan[df_filtered_nan.Day_number == day].index)

即从df_filtered_nan中删除。 (如果您这样做,IMO 也会更具可读性:

row_indexes_to_drop = df_filtered_nan[df_filtered_nan.Day_number == day].index
df_filtered_nan = df_filtered_nan.drop(row_indexes_to_drop)

)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM