Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:将列分解为多行_Python_Regex_Pandas_Dataframe - Fatal编程技术网

Python 熊猫:将列分解为多行

Python 熊猫:将列分解为多行,python,regex,pandas,dataframe,Python,Regex,Pandas,Dataframe,在Pandas中基于正则表达式拆分字段并创建数据帧时需要一些帮助 A. B C 1129 2021年4月19日 邮编详情:城市:阿拉巴马州亨茨维尔,邮编:35808,801thru816城市:阿拉斯加州安克雷奇,邮编:99506,501至524 1139 2021年4月20日 邮政编码详细信息:城市:佛罗里达州迈阿密,邮编:33128,124至190城市:佐治亚州亚特兰大,邮编:30301301thru381 实际上,在我的演讲中,您甚至不需要正则表达式库,pandas包含正则表达式,因此您可以

在Pandas中基于正则表达式拆分字段并创建数据帧时需要一些帮助

A. B C 1129 2021年4月19日 邮编详情:城市:阿拉巴马州亨茨维尔,邮编:35808,801thru816城市:阿拉斯加州安克雷奇,邮编:99506,501至524 1139 2021年4月20日 邮政编码详细信息:城市:佛罗里达州迈阿密,邮编:33128,124至190城市:佐治亚州亚特兰大,邮编:30301301thru381
实际上,在我的演讲中,您甚至不需要正则表达式库,pandas包含正则表达式,因此您可以拆分为:

df['C'] = df['C'].str.split(' City: ').str[1:]
df = df.explode('C')
df[['City','Zip']] = df['C'].str.split(' , Zip: | , ', expand=True).iloc[:,:2]

print(df)

     No         Date                City    Zip
0  1129  19-APR-2021  Huntsville_Alabama  35808
0  1129  19-APR-2021    Anchorage_Alaska  99506
1  1139  20-APR-2021       Miami_Florida  33128
1  1139  20-APR-2021     Atlanta_Georgia  30301
expand=True
参数允许一次检索多个列。
.iloc[]
用于选择发生拆分后要使用的值。

City
Zip
上尝试
.explode()
,然后是
reset\u index()
,最后在index>上连接两个分解结果

df.explode('City').reset_index()[['No', 'Date', 'City']]\
    .join(df.explode('Zip').reset_index()[['Zip']])
正则表达式详细信息:

  • City:
    :按字面意思匹配字符
    City:
  • \s*
    :匹配零个或多个空白字符
  • (?P[^,]+?)
    :第一个命名的捕获组
    • [^,]+?
      :匹配除
      以外的任何字符一次或多次,但次数尽可能少
  • \s*,\s*
    :匹配零个或多个空格,后跟逗号,后跟零个或多个空格
  • Zip:
    :按字面意思匹配字符
    Zip:
  • \s*
    :匹配零个或多个空白字符
  • (?P\d+)
    :第二个命名的捕获组
    • \d+
      :将一个数字匹配一次或多次

见在线

谢谢你,Andreas,但是我无法获得4张记录。只有阿拉斯加州和乔治亚州的安克雷奇被找回。@pats4u哦,你说得对,修好了。抱歉搞混了,谢谢Shubham。但是,我无法获得上述输出。不确定我是否遗漏了什么,以下是输出:无日期C 0 1129 19-APR-2021邮政编码详细信息:城市:亨茨维尔阿拉巴马州,Z。。。1139 20-APR-2021邮政编码详细信息:城市:佛罗里达州迈阿密,邮政编码:3…使用上述方法2或4后,您得到了多少行?我只能查看2条记录,而无需提取城市或邮政编码。df['No',Date']]。join(s.droplevel(1))不是一个就地操作,您必须将其分配回某个变量。例如
out=df[['No','Date']]。现在加入(s.droplevel(1))
检查
out的值
s = df['C'].str.extractall(r'City:\s*(?P<City>[^,]+?)\s*,\s*Zip:\s*(?P<Zip>\d+)')
df[['No', 'Date']].join(s.droplevel(1))
     No         Date                City    Zip
0  1129  19-APR-2021  Huntsville_Alabama  35808
0  1129  19-APR-2021    Anchorage_Alaska  99506
1  1139  20-APR-2021       Miami_Florida  33128
1  1139  20-APR-2021     Atlanta_Georgia  30301