【发布时间】:2019-08-13 22:13:15
【问题描述】:
我正在尝试在我的 pandas 数据框中的地址列中建立一致性。我有一个邮政编码列,它有两种格式:1)87301 2)87301-1234。并非每一行都有连字符,所以我需要在连字符出现时对其进行拆分。
我的数据如下所示:
State ZIP
CA 85145-7045
PA 76913
我已经尝试了一些解决这个问题的方法。我试过了:
data['Zip_1'],data['Zip_2'] = data['Zip'].str.split('-').str
我试过了:
data['Zip'] = data['Zip'].str.split('-', n=1, expand=True)
data['Zip'] = data['Zip'][0]
data['Zip_drop'] = data['Zip'][1]
我也尝试过使用 lambda 函数。
但是它只返回空值。
对于没有连字符的邮政编码和连字符后面的数字(如果它确实包含连字符),我希望新列返回 NaN。 但是,新列只是为每个观察填充 NaN
【问题讨论】:
-
splitsville = data['Zip'][data['Zip].str.contains("-")].str.split("-") -
ValueError: 无法使用包含 NA / NaN 值的向量进行索引。正是我正在寻找的内容,所以感谢您的尝试
-
@connerleavitt 见stackoverflow.com/questions/57316346/…。
.str方法作用于对象列,可以容纳任何东西,所以当它们作用于非字符串值时,它们的默认值是返回NaN。在使用== True或.fillna(False)对 DataFrame 进行切片时,您应该明确检查它们 -
@ALollz 很好,我在问这个问题之前已经这样做了。感谢您的验证!
-
实际上,更好的是,您可以指定
na=False作为参数:D