Python 关于熊猫行中棘手字符串的建议 我正在处理天气数据,我还在学习如何有效地使用熊猫…我有一个熊猫数据集,我有一排风速和方向的格式。问题是方向的字符串格式。风速和风向列df['WindDirSpeed']的当前格式如下: IssueDatetime Regions \ 0 2018-01-01 06:00:00 SOUTH COAST 1 2018-01-01 06:00:00 SOUTH COAST 2 2018-01-01 06:00:00 SOUTH COAST 3 2018-01-01 06:00:00 SOUTH COAST 4 2018-01-01 06:00:00 EAST COAST-CAPE ST FRANCIS AND SOUTH ... ... ... 12833 2018-12-30 06:00:00 SOUTHEASTERN GRAND BANKS 12834 2018-12-30 06:00:00 SOUTHEASTERN GRAND BANKS 12835 2018-12-30 06:00:00 SOUTHEASTERN GRAND BANKS 12836 2018-12-30 06:00:00 SOUTHWESTERN GRAND BANKS 12837 2018-12-30 06:00:00 SOUTHWESTERN GRAND BANKS forecastTime forecastHour WindDirSpeed 0 2018-01-01 06:00:00 0.0 SW35 1 2018-01-01 15:00:00 9.0 SW25 2 2018-01-02 08:00:00 26.0 SW15-20 3 2018-01-02 15:00:00 33.0 VRB10-15 4 2018-01-01 06:00:00 0.0 SW35 ... ... ... ... 12833 2018-12-30 06:00:00 0.0 W25 12834 2018-12-30 09:00:00 3.0 W25 12835 2018-12-30 18:00:00 12.0 NW35 12836 2018-12-30 06:00:00 0.0 W25 12837 2018-12-30 12:00:00 6.0 NW30
我尝试编写一个函数,提取方向并创建一个仅包含风向的新行:Python 关于熊猫行中棘手字符串的建议 我正在处理天气数据,我还在学习如何有效地使用熊猫…我有一个熊猫数据集,我有一排风速和方向的格式。问题是方向的字符串格式。风速和风向列df['WindDirSpeed']的当前格式如下: IssueDatetime Regions \ 0 2018-01-01 06:00:00 SOUTH COAST 1 2018-01-01 06:00:00 SOUTH COAST 2 2018-01-01 06:00:00 SOUTH COAST 3 2018-01-01 06:00:00 SOUTH COAST 4 2018-01-01 06:00:00 EAST COAST-CAPE ST FRANCIS AND SOUTH ... ... ... 12833 2018-12-30 06:00:00 SOUTHEASTERN GRAND BANKS 12834 2018-12-30 06:00:00 SOUTHEASTERN GRAND BANKS 12835 2018-12-30 06:00:00 SOUTHEASTERN GRAND BANKS 12836 2018-12-30 06:00:00 SOUTHWESTERN GRAND BANKS 12837 2018-12-30 06:00:00 SOUTHWESTERN GRAND BANKS forecastTime forecastHour WindDirSpeed 0 2018-01-01 06:00:00 0.0 SW35 1 2018-01-01 15:00:00 9.0 SW25 2 2018-01-02 08:00:00 26.0 SW15-20 3 2018-01-02 15:00:00 33.0 VRB10-15 4 2018-01-01 06:00:00 0.0 SW35 ... ... ... ... 12833 2018-12-30 06:00:00 0.0 W25 12834 2018-12-30 09:00:00 3.0 W25 12835 2018-12-30 18:00:00 12.0 NW35 12836 2018-12-30 06:00:00 0.0 W25 12837 2018-12-30 12:00:00 6.0 NW30,python,python-3.x,pandas,Python,Python 3.x,Pandas,我尝试编写一个函数,提取方向并创建一个仅包含风向的新行: def find_windDir(row): directions = ['VRB', 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'] for d in directions: if d in row['WindDirSpeed']: row['dir'] = d row['WindSpeed'] = row['Wind
def find_windDir(row):
directions = ['VRB', 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']
for d in directions:
if d in row['WindDirSpeed']:
row['dir'] = d
row['WindSpeed'] = row['WindDirSpeed'].replace(d,'')
return row
不幸的是,这不起作用,因为“在行”查找方向字符串的所有变化
理想情况下,我需要将数据集与单独列中的风速和方向分开:
Dir WindSpeed
SW 35
SW 25
SW 15-20
试试这个:
df['Dir'] = df['WindDirSpeed'].str.extract(r'([A-Z]*)')
df['WindSpeed'] = df['WindDirSpeed'].str.extract(r'([0-9]+\-[0-9]+|[0-9]+)')
print(df)
输出:
forecastTime forecastHour WindDirSpeed Dir WindSpeed
2018-01-01 06:00:00 0.0 SW35 SW 35
2018-01-01 15:00:00 9.0 SW25 SW 25
2018-01-02 08:00:00 26.0 SW15-20 SW 15-20
2018-01-02 15:00:00 33.0 VRB10-15 VRB 10-15
2018-01-01 06:00:00 0.0 SW35 SW 35
2018-12-30 06:00:00 0.0 W25 W 25
2018-12-30 09:00:00 3.0 W25 W 25
2018-12-30 18:00:00 12.0 NW35 NW 35
2018-12-30 06:00:00 0.0 W25 W 25
2018-12-30 12:00:00 6.0 NW30 NW 30
试试这个:
df['Dir'] = df['WindDirSpeed'].str.extract(r'([A-Z]*)')
df['WindSpeed'] = df['WindDirSpeed'].str.extract(r'([0-9]+\-[0-9]+|[0-9]+)')
print(df)
输出:
forecastTime forecastHour WindDirSpeed Dir WindSpeed
2018-01-01 06:00:00 0.0 SW35 SW 35
2018-01-01 15:00:00 9.0 SW25 SW 25
2018-01-02 08:00:00 26.0 SW15-20 SW 15-20
2018-01-02 15:00:00 33.0 VRB10-15 VRB 10-15
2018-01-01 06:00:00 0.0 SW35 SW 35
2018-12-30 06:00:00 0.0 W25 W 25
2018-12-30 09:00:00 3.0 W25 W 25
2018-12-30 18:00:00 12.0 NW35 NW 35
2018-12-30 06:00:00 0.0 W25 W 25
2018-12-30 12:00:00 6.0 NW30 NW 30
简单的修复应该是按长度(最长的第一个)按“方向”排列字符串。
df['WindDirSpeed'].str.split(“([VNEWS][REW]?[B]?)”,expand=True)
应该是按长度(最长的第一个)按“方向”排列字符串。df['WindDirSpeed'].str.split(“([VNEWS][REW]?[B]?)”,expand=True)
应该有效,刚刚意识到我需要提取
,而不是分割
。我使用的正则表达式是Dir
:'([VNEWS][REW]?[B]?)
,而WindSpeed
是'[VNEWS][REW]?[B]?(.*)
第一个运行正常,第二个运行不正常,你得到了什么错误?它应该是相同的-在这种情况下,捕获组是“模式后任何字符的任意数量”抱歉,它们都工作:df['Dir']=df['WindDirSpeed'].str.extract(r'([VNEWS][REW]?[B]?)
df['WindSpeed']=df['WindDirSpeed'].str.extract(r'[VNEWS][REW]?[B](*)
是的,刚刚意识到我需要提取
,而不是分割
。我使用的正则表达式是Dir
:'([VNEWS][REW]?[B]?)
,而WindSpeed
是'[VNEWS][REW]?[B]?(.*)
第一个运行正常,第二个运行不正常,你得到了什么错误?它应该是相同的-在这种情况下,捕获组是“模式后任何字符的任意数量”抱歉,它们都工作:df['Dir']=df['WindDirSpeed'].str.extract(r'([VNEWS][REW]?[B]?)
df['WindSpeed']=df['WindDirSpeed'].str.extract(r'[VNEWS][REW]?[B]?(*)