我有一个从CSV文件中读入的气象数据帧,其中两列‘Sea_Level_Presence’和‘Wind_Speed’都有一个后缀为‘S’的数值,我想删除它们.但是,当我使用:

df['Sea_Level_Pressure'] = df['Sea_Level_Pressure'].str.replace('s','')
df['Wind_Speed'] = df['Wind_Speed'].str.replace('s','')

结果是,对于前半行,‘Sea_Level_Pressage’的值被替换为NULL,而在数据帧的后半行中的同一行,‘Wind_Speed’的值被替换为NULL.这两列的数据类型都是Object.

以下是示例代码,它将从NOAA下载CSV,并在应用str.place之前和之后打印CSV.正如您在输出的第二个CSV文件中看到的那样,这两列空值的中断发生在2020-09-09 16:52.

import pandas as pd

url = 'https://www.ncei.noaa.gov/data/local-climatological-data/access/2020/72530594892.csv'
df = pd.read_csv(url)
df = df[df.REPORT_TYPE == 'FM-15']
df = df[['DATE', 'HourlyDryBulbTemperature','HourlyRelativeHumidity','HourlySeaLevelPressure','HourlyWindSpeed','HourlyPrecipitation']]
df.rename(columns={'HourlyDryBulbTemperature': 'Temp_F', 'HourlyRelativeHumidity':'Rel_Humidity', 'HourlySeaLevelPressure':'Sea_Level_Pressure','HourlyWindSpeed':'Wind_Speed','HourlyPrecipitation':'Precip'}, inplace=True)

df.to_csv('weather_bf_replace.csv', index=False)

df['Sea_Level_Pressure'] = df['Sea_Level_Pressure'].str.replace('s','')
df['Wind_Speed'] = df['Wind_Speed'].str.replace('s','')

df.to_csv('weather_after_replace.csv',index=False)

有趣的是,如果我在执行str.replace之前将df保存到一个临时csv中,然后将临时csv读回一个df中,并将str.replace应用于该对象框架,它可以正常工作. 我try 在读取CSV后立即将str.replace添加到原始的JavaScript框架中,我得到了相同的行为,因此过滤和重命名列的几行代码不会导致问题. 我还判断了中断发生的日期时间周围的原始csv文件,数据中没有任何异常.

首先要感谢你的帮助.我对此束手无策.

推荐答案

原因是您的列包含混合类型,可能是因为数据存储在原始CSV中的方式.

print(set([type(x) for x in df['Sea_Level_Pressure']]))

将导致{float, str}

但是,str.replace是一种适用于str类型的方法.要解决此问题,请先将列转换为str,然后再转换回float:

df = df['Sea_Level_Pressure'].astype(str).str.replace('s','').astype(float)

或者,在导入过程中显式指定列的dtype.

Python相关问答推荐

将numpy数组存储在原始二进制文件中

Python 3.12中的通用[T]类方法隐式类型检索

如何在BeautifulSoup中链接Find()方法并处理无?

在内部列表上滚动窗口

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

Django管理面板显示字段最大长度而不是字段名称

Django mysql图标不适用于小 case

为什么符号没有按顺序添加?

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

Polars:用氨纶的其他部分替换氨纶的部分

numpy卷积与有效

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

Django admin Csrf令牌未设置

将scipy. sparse矩阵直接保存为常规txt文件

如何按row_id/row_number过滤数据帧

如何删除重复的文字翻拍?

Polars表达式无法访问中间列创建表达式

通过对列的其余部分进行采样,在Polars DataFrame中填充_null`?

如何在表单中添加管理员风格的输入(PDF)