我有一个从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相关问答推荐

两个pandas的平均值按元素的结果串接元素.为什么?

删除字符串中第一次出现单词后的所有内容

Odoo 16使用NTFS使字段只读

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

需要帮助重新调整python fill_between与数据点

Polars asof在下一个可用日期加入

将链中的矩阵乘法应用于多组值

在极点中读取、扫描和接收有什么不同?

高效生成累积式三角矩阵

BeatuifulSoup从欧洲志愿者服务中获取数据和解析:一个从EU-Site收集机会的小铲子

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样

删除另一个div中的特定div容器

多个布尔条件的`jax.lax.cond`等效项

在Pandas 中,有没有办法让元组作为索引运行得很好?

我应该使用哪一个来判断python中枚举值的唯一性?

更改Python中的数据格式

给定Pandas 列DataFrame中的一个值,在其他DataFrame中 Select 与该值最接近的N行

如何使用Tkinter的CheckButtom隐藏或显示由滑块控制的画布线?

查找一个数据帧中另一个数据帧的值的索引

Pandas 多重索引不返回级别和标签