我有一个地址列表,我想把它放入一个数据帧中,每一行都是一个新地址,列是地址的单位(标题、街道、城市)。在
但是,从列表的结构来看,有些地址比其他地址长。例如:
address = ['123 Some Street, City','45 Another Place, PO Box 123, City']
我有一个pandas数据帧,包含以下列:
^{pr2}$我想根据地址中逗号分隔符的数量,将Address列拆分为至多三个列,并在缺少值的地方填充NaN。在
例如,我希望数据如下所示:
Index Court Address Address2 City Zip Phone
0 Court 1 123 Court Dr NaN Springfield ... ...
1 Court 2 45 Court Pl PO Box 45 Pawnee ... ...
2 Court 3 1725 Slough Ave NaN Scranton ... ...
3 Court 4 101 Court Ter Unit 321 Eagleton ... ...
我在StackOverflow上尝试了大量不同的解决方案,但都没有成功。我得到的最接近的是这个代码:
df2 = pd.concat([df, df['Address'].str.split(', ', expand=True)], axis=1)
但这将返回一个dataframe,该数据框将以下三个列添加到结构如下的末尾:
... 0 1 2
... 123 Court Dr Springfield None
... 45 Court Pl PO Box 45 Pawnee
这很接近,但正如您所见,对于较短的条目,城市将与第二个地址行一起为较长的条目排队。在
理想情况下,第2列应该用一个城市填充每一行,第1列应该在“无”和第二个地址行之间交替(如果适用)。在
我希望这是有意义的——这是一个难以用语言表达的问题。谢谢!在
你可以这样做:
地址,尤其是那些由人工输入产生的地址可能很棘手。但是,如果您的地址只适合这两种格式,则可以:
注意:如果有一个额外的格式你必须说明,这将打印罪魁祸首。在
从本质上讲,有两件事应该对您有所帮助:一个是
string.count()
函数,它将告诉您字符串中逗号的数量;另一个是您已经找到的将输入拆分成数组的string.split()
。您可以引用此数组的部分来将片段分配到正确的列。在您可以考虑使用包usaddress创建函数。当我需要将地址分成几部分时,这对我非常有帮助:
然后创建用于分割数据的函数:
^{pr2}$输出:
相关问题 更多 >
编程相关推荐