我正在使用Pandas中的以下数据。对于街区列,我需要更改每个值,使其仅包含街道名称(这样我就可以对纬度长的坐标进行地理编码)。要使用我正在使用的地址解析器,还需要添加“华盛顿特区”。
crimes = pd.read_csv("/content/SearchResults (2).txt", encoding='latin-1')
这不是我的BLOCK列的样子:
2ND STREET SE, WASHINGTON DC
TAYLOR STREET NE, WASHINGTON DC
我该怎么做?如果更容易,我可以使用此信息添加另一列,而不用更改块列。显然您不能在pd数据帧上使用字符串方法,而对于正则表达式我一无所知……请帮助!
编辑:
此代码正是我想要的:
for i in crimes['BLOCK']:
i = i.split()
i = i[-3:]
i = " ".join([str(elem) for elem in i])
i = i + ", WASHINGTON DC "
print(i)
输出看起来像这样:
MINNESOTA AVENUE NE, WASHINGTON DC
MORSE STREET NE, WASHINGTON DC
如何将实际的列值重新分配给上面的i变量?
编辑2:
以下是csv文件的示例:
REPORT_DAT,OFFENSE,METHOD,BLOCK,DISTRICT,WARD,NEIGHBORHOOD_CLUSTER,BLOCK_GROUP,XBLOCK,YBLOCK,START_DATE
6/30/2020 3:03:21 AM,THEFT F/AUTO,OTHERS,5700 - 5799 BLOCK OF 27TH STREET NW,2,4,Cluster 10,001500 1,395132,144513,6/29/2020 2:00:48 PM
6/30/2020 12:04:33 AM,MOTOR VEHICLE THEFT,OTHERS,4432 - 4499 BLOCK OF GREENWICH PARKWAY NW,2,3,Cluster 13,000802 2,392727,138206,6/29/2020 1:00:43 PM
答案 0 :(得分:2)
我不知道您尝试了什么,但是使用pandas
内置的字符串方法没有问题
df['BLOCK'] = df['BLOCK'].str.split('OF').str[1] + ', WASHINGTON DC'
最小工作代码
text ='''REPORT_DAT,SHIFT,OFFENSE,METHOD,BLOCK
6/30/2020 3:03:21 AM,MIDNIGHT,THEFT F/AUTO,OTHERS,5700 - 5799 BLOCK OF 27TH STREET NW
6/30/2020 12:04:33 AM,MIDNIGHT,MOTOR VEHICLE THEFT,OTHERS,4432 - 4499 BLOCK OF GREENWICH PARKWAY NW'''
import pandas as pd
import io
df = pd.read_csv(io.StringIO(text))
print('--- before ---')
print(df['BLOCK'])
df['BLOCK'] = df['BLOCK'].str.split('OF').str[1] + ', WASHINGTON DC'
print('--- after ---')
print(df['BLOCK'])
结果
--- before ---
0 5700 - 5799 BLOCK OF 27TH STREET NW
1 4432 - 4499 BLOCK OF GREENWICH PARKWAY NW
Name: BLOCK, dtype: object
--- after ---
0 27TH STREET NW, WASHINGTON DC
1 GREENWICH PARKWAY NW, WASHINGTON DC
Name: BLOCK, dtype: object
顺便说一句: pandas
使用了自己的字符串函数,而这些字符串函数是普通字符串函数中找不到的-.str.contains()
。其中一些可以重建-即。 .str.replace()
可以使用正则表达式。
顺便说一句::您还可以使用.apply()
,然后使用标准字符串函数
df['BLOCK'] = df['BLOCK'].apply(lambda text: text.split('OF')[1] + ', WASHINGTON DC')
或
def convert(text):
return text.split('OF')[1] + ', WASHINGTON DC'
df['BLOCK'] = df['BLOCK'].apply(convert)
然后可以在convert()
中使用更复杂的代码-即。您可以轻松使用if/else