在 Pandas 中将一列拆分为多列
Split One Column to Multiple Columns in Pandas
我想将一个 current column 分成 3 列。在屏幕截图中,我们看到构建器列,需要将其拆分为 3 个以上的列,例如 b.name 、城市和国家/地区。所以我在 python 中使用 str.split() 方法来拆分列,这给我 2 列 ownerName = df['owner_name'] df[["ownername", "owner_country"]] = df["owner_name"].str.split("-", expand=True)
的好结果
但是当涉及到三列 ownerName = df['owner_name'] df[["ownername", "city", "owner_country"]] = df["owner_name"].str.split("," ,"-", expand=True)
时,我使用了 2 个分隔符 ',' 和 '-',它给我这个错误:
File "C:\Users....\lib\site-packages\pandas\core\frame.py", line 3160, in setitem
self._setitem_array(key, value)
File "C:\Users....\lib\site-packages\pandas\core\frame.py", line 3189, in _setitem_array
raise ValueError("Columns must be same length as key")
ValueError: Columns must be same length as key
2 个分隔符“,”和“-”的最佳解决方案是什么,还有一些空行。
如果您觉得需要,您可以合并一些行,但这是一个可能的选项,对于项目中包含的大多数开发人员来说应该非常易读
data = {
'Column1' : ['Builder Name - City, Country']
}
df = pd.DataFrame(data)
df['Builder_Name'] = df['Column1'].apply(lambda x : x.split('-')[0])
df['City_Name'] = df['Column1'].apply(lambda x : x.split('-')[1:])
df['City_Name'] = df['City_Name'][0]
df['City_Name'] = df['City_Name'].apply(lambda x : x.split()[0])
df['City_Name'] = df['City_Name'].apply(lambda x : x.replace(',', ''))
df['Country'] = df['Column1'].apply(lambda x : x.split(',')[1])
df = df[['Builder_Name', 'City_Name', 'Country']]
df
您的确切输入不清楚,但假设@ArchAngelPwn 提供的示例输入,您可以使用 str.split
和正则表达式:
names = ['Builder_Name', 'City_Name', 'Country']
out = (df['Column1']
.str.split(r'\s*[,-]\s*', expand=True) # split on "," or "-" with optional spaces
.rename(columns=dict(enumerate(names))) # rename 0/1/2 with names in order
)
输出:
Builder_Name City_Name Country
0 Builder Name City Country
如问题中所述,有 2 个分隔符“-”和“,”。对于一个我们简单地使用 str.split("-", expand=True) 对于 2 个不同的分隔符我们可以使用相同的代码并添加小代码,例如 column1 = name-city name ,country (Owner = SANTIERUL NAVAL CONSTANTA - CONSTANTZA, ROMANIA) 代码将写为 ownerName = df['owner_name'] df[["Owner_name", "City_Name", "owner_country"]] = df["owner_name"].str.split(r', |- |\*|\n', expand=True)
我想将一个 current column 分成 3 列。在屏幕截图中,我们看到构建器列,需要将其拆分为 3 个以上的列,例如 b.name 、城市和国家/地区。所以我在 python 中使用 str.split() 方法来拆分列,这给我 2 列 ownerName = df['owner_name'] df[["ownername", "owner_country"]] = df["owner_name"].str.split("-", expand=True)
但是当涉及到三列 ownerName = df['owner_name'] df[["ownername", "city", "owner_country"]] = df["owner_name"].str.split("," ,"-", expand=True)
时,我使用了 2 个分隔符 ',' 和 '-',它给我这个错误:
File "C:\Users....\lib\site-packages\pandas\core\frame.py", line 3160, in setitem self._setitem_array(key, value) File "C:\Users....\lib\site-packages\pandas\core\frame.py", line 3189, in _setitem_array raise ValueError("Columns must be same length as key") ValueError: Columns must be same length as key
2 个分隔符“,”和“-”的最佳解决方案是什么,还有一些空行。
如果您觉得需要,您可以合并一些行,但这是一个可能的选项,对于项目中包含的大多数开发人员来说应该非常易读
data = {
'Column1' : ['Builder Name - City, Country']
}
df = pd.DataFrame(data)
df['Builder_Name'] = df['Column1'].apply(lambda x : x.split('-')[0])
df['City_Name'] = df['Column1'].apply(lambda x : x.split('-')[1:])
df['City_Name'] = df['City_Name'][0]
df['City_Name'] = df['City_Name'].apply(lambda x : x.split()[0])
df['City_Name'] = df['City_Name'].apply(lambda x : x.replace(',', ''))
df['Country'] = df['Column1'].apply(lambda x : x.split(',')[1])
df = df[['Builder_Name', 'City_Name', 'Country']]
df
您的确切输入不清楚,但假设@ArchAngelPwn 提供的示例输入,您可以使用 str.split
和正则表达式:
names = ['Builder_Name', 'City_Name', 'Country']
out = (df['Column1']
.str.split(r'\s*[,-]\s*', expand=True) # split on "," or "-" with optional spaces
.rename(columns=dict(enumerate(names))) # rename 0/1/2 with names in order
)
输出:
Builder_Name City_Name Country
0 Builder Name City Country
如问题中所述,有 2 个分隔符“-”和“,”。对于一个我们简单地使用 str.split("-", expand=True) 对于 2 个不同的分隔符我们可以使用相同的代码并添加小代码,例如 column1 = name-city name ,country (Owner = SANTIERUL NAVAL CONSTANTA - CONSTANTZA, ROMANIA) 代码将写为 ownerName = df['owner_name'] df[["Owner_name", "City_Name", "owner_country"]] = df["owner_name"].str.split(r', |- |\*|\n', expand=True)