Python 3.x 拆分';城市、州邮政编码';在dataframe中分为三列

Python 3.x 拆分';城市、州邮政编码';在dataframe中分为三列,python-3.x,pandas,Python 3.x,Pandas,我正在尝试将包含City、State和Zip的列拆分为三列。列中的数据格式为:“城市,州邮政编码”-逗号分隔城市和州,空格分隔州和邮政编码。我可以使用以下方法划分城市: df['Owner City State Zip'].str.split(',').apply(lambda x: x[0] 但出于某种原因,当我尝试以下方式来划分状态和压缩时: df['Owner City State Zip'].str.split(',').apply(lambda x: x[1] 我收到错误-索引超出

我正在尝试将包含City、State和Zip的列拆分为三列。列中的数据格式为:“城市,州邮政编码”-逗号分隔城市和州,空格分隔州和邮政编码。我可以使用以下方法划分城市:

df['Owner City State Zip'].str.split(',').apply(lambda x: x[0]
但出于某种原因,当我尝试以下方式来划分状态和压缩时:

df['Owner City State Zip'].str.split(',').apply(lambda x: x[1]
我收到错误-
索引超出范围


任何帮助都将不胜感激!这似乎微不足道,但比我预想的要困难得多。

考虑一下
df

df = pd.DataFrame({'Owner City State Zip': ["Los Angeles, CA 90015"]})

print(df)

    Owner City State Zip
0  Los Angeles, CA 90015
我会使用这个方便的正则表达式和pandas
str
string访问器

regex = r'(?P<City>[^,]+)\s*,\s*(?P<State>[^\s]+)\s+(?P<Zip>\S+)'
df['Owner City State Zip'].str.extract(regex)

          City State    Zip
0  Los Angeles    CA  90015
regex=r'(?P[^,]+)\s*,\s*(?P[^\s]+)\s+(?P\s+)
df['Owner City State Zip'].str.extract(regex)
城市州邮政编码
0加利福尼亚州洛杉矶90015

考虑
df

df = pd.DataFrame({'Owner City State Zip': ["Los Angeles, CA 90015"]})

print(df)

    Owner City State Zip
0  Los Angeles, CA 90015
我会使用这个方便的正则表达式和pandas
str
string访问器

regex = r'(?P<City>[^,]+)\s*,\s*(?P<State>[^\s]+)\s+(?P<Zip>\S+)'
df['Owner City State Zip'].str.extract(regex)

          City State    Zip
0  Los Angeles    CA  90015
regex=r'(?P[^,]+)\s*,\s*(?P[^\s]+)\s+(?P\s+)
df['Owner City State Zip'].str.extract(regex)
城市州邮政编码
0加利福尼亚州洛杉矶90015

看起来问题出在
x[1]
中。你能分享更多你的代码吗?仅仅从一个不完整的语句就很难识别问题。每行都有一个用逗号分隔的城市和州吗?是的,每行都有一个用逗号分隔的城市和州。有几个例子是:“加利福尼亚州洛杉矶90015”“加利福尼亚州托伦斯90504”“加利福尼亚州曼哈顿海滩90266”。尝试将问题分为几行,并将其提交给我们,以便我们可以复制该问题!如果这失败了,至少给我们一些示例行。您的问题可能是某些行只有城市。通过这样做进行检查:
df[len_str]=df['owner city state zip'].str.split(',').apply(len)
然后
df[df.len_str<2]
我的意思是,你是否在每一行中搜索逗号?我知道你认为每一行都有逗号,但这并不意味着实际上有逗号
df['num_commas']=df['Owner City State Zip'].str.count(',')
。然后,作为第一次检查,确保列值严格大于0。问题似乎出在
x[1]
中。你能分享更多你的代码吗?仅仅从一个不完整的语句就很难识别问题。每行都有一个用逗号分隔的城市和州吗?是的,每行都有一个用逗号分隔的城市和州。有几个例子是:“加利福尼亚州洛杉矶90015”“加利福尼亚州托伦斯90504”“加利福尼亚州曼哈顿海滩90266”。尝试将问题分为几行,并将其提交给我们,以便我们可以复制该问题!如果这失败了,至少给我们一些示例行。您的问题可能是某些行只有城市。通过这样做进行检查:
df[len_str]=df['owner city state zip'].str.split(',').apply(len)
然后
df[df.len_str<2]
我的意思是,你是否在每一行中搜索逗号?我知道你认为每一行都有逗号,但这并不意味着实际上有逗号
df['num_commas']=df['Owner City State Zip'].str.count(',')
。然后,作为第一次检查,确保列值严格大于0。