使用 python pandas 将一列拆分为两列
Split one column into two columns with python pandas
我有一个城市 df,显示为:
| id | location |
|----|------------------|
| 1 | New York (NY) |
| 2 | Los Angeles (CA) |
| 3 | Houston (TX) |
我希望使用某种 split/strip 给我类似
| id | city | state |
|----|------------------|-------|
| 1 | New York | NY |
| 2 | Los Angeles | CA |
| 3 | Houston | TX |
或者即使是三列,一个是原创的,另外两个是代码制作的。
我已经尝试过类似的东西:
df[['city', 'state']] = df['location'].str.split("(", expand=True)
df['state'] = df['state'].str.strip(")")
这行得通,但没那么多,因为每个城市名称后面都有一个空白 space,不应该。如果我搜索一个城市,例如:
df[df['city'] == 'Houston']
它不会 return 什么,但我必须编写如下代码:
df[df['city'] == 'Houston '] # note the empty space after code
给我一些有用的东西,但是当我进行合并或类似的事情时,这种方式会让我头疼。
那么,有人有处理这段代码的一些技巧吗?我在互联网上找不到任何有用的东西。它总是一个简单的拆分,或者一个简单的条带。但我相信有一种更智能的模式可以做到这一点。
嗯,是的,为什么不 df['city'] = df['city'].strip()
?
使用str.extract
:
df = df.join(df.pop('location').str.extract(r'(.*)\s*\((.*)\)')
.rename(columns={0: 'location', 1: 'state'}))
print(df)
# Output
id location state
0 1 New York NY
1 2 Los Angeles CA
2 3 Houston TX
我有一个城市 df,显示为:
| id | location |
|----|------------------|
| 1 | New York (NY) |
| 2 | Los Angeles (CA) |
| 3 | Houston (TX) |
我希望使用某种 split/strip 给我类似
| id | city | state |
|----|------------------|-------|
| 1 | New York | NY |
| 2 | Los Angeles | CA |
| 3 | Houston | TX |
或者即使是三列,一个是原创的,另外两个是代码制作的。 我已经尝试过类似的东西:
df[['city', 'state']] = df['location'].str.split("(", expand=True)
df['state'] = df['state'].str.strip(")")
这行得通,但没那么多,因为每个城市名称后面都有一个空白 space,不应该。如果我搜索一个城市,例如:
df[df['city'] == 'Houston']
它不会 return 什么,但我必须编写如下代码:
df[df['city'] == 'Houston '] # note the empty space after code
给我一些有用的东西,但是当我进行合并或类似的事情时,这种方式会让我头疼。
那么,有人有处理这段代码的一些技巧吗?我在互联网上找不到任何有用的东西。它总是一个简单的拆分,或者一个简单的条带。但我相信有一种更智能的模式可以做到这一点。
嗯,是的,为什么不 df['city'] = df['city'].strip()
?
使用str.extract
:
df = df.join(df.pop('location').str.extract(r'(.*)\s*\((.*)\)')
.rename(columns={0: 'location', 1: 'state'}))
print(df)
# Output
id location state
0 1 New York NY
1 2 Los Angeles CA
2 3 Houston TX