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]?(*)