首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从dataframe列(不同格式)中提取城市

如何从dataframe列(不同格式)中提取城市
EN

Stack Overflow用户
提问于 2022-11-01 12:19:42
回答 3查看 49关注 0票数 3

我有这个数据,我想在一个单独的列中提取城市。您还可以看到,格式不一样,城市可以在行的任何位置。如何仅提取新列的城市?提示符。这里我们讨论的是德国城市。可以找到一本字典,它显示了所有的德国城市,并以某种方式与我的数据集进行了比较。

这是德国城市词典:https://gist.github.com/embayer/772c442419999fa52ca1

Dataframe

代码语言:javascript
运行
复制
Adresse
0   Karlstr 10, 10 B, 30,; 04916 Hamburg
1   München Dorfstr. 28-55, 22555
2   Marnstraße. Berlin 12, 45666 Berlin
3   Musterstr, 24855 Dresden
... ...
850 Muster Hausweg 11, Hannover, 56668
851 Mariestr. 4, 48669 Nürnberg
852 Hilden Weederstr 33-55, 56889
853 Pt-gaanen-Str. 2, 45883 Potsdam

输出

代码语言:javascript
运行
复制
Cities
0   Hamburg
1   München
2   Berlin
3   Dresden
... ...
850 Hannover
851 Nürnberg
852 Hilden
853 Potsdam
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-11-01 12:36:41

您可以在列表中从您提供的字典中提取所有城市(我假设它是'stadt‘key ),然后在您的专栏中使用str.findall

代码语言:javascript
运行
复制
cities_ = [cities[n]['stadt'] for n in range(0,len(cities))]
df.Adresse.str.findall(r'|'.join(cities_))

>>>
0    [Karlstr, Hamburg]
1                    []
2                    []
3                    []
4                    []
5                    []
6                    []
7                    []
8                    []
Name: Adresse, dtype: object
票数 1
EN

Stack Overflow用户

发布于 2022-11-01 12:45:45

您可以简单地使用str.extract,因为所有的名称都在两颗星之间。

代码语言:javascript
运行
复制
df["cities"] = df["Adress"].str.extract(r'\*\*(\w+)\*\*')

因为你的文件中似乎没有星星,所以你可以采取不同的做法。

从链接的文件中使用名为cities的城市字典,但只保留城市的唯一序列(称为set)。

代码语言:javascript
运行
复制
german_cities = set(map(lambda x: x['stadt'], cities))

然后,我们将拆分每行的地址字符串,并在德国城市词典中查找。

由于应用的第一个论点是系列本身,我们只需要告诉它看一看德国的城市。

代码语言:javascript
运行
复制
def lookup_cities(string, cities):
    splits = string.replace(",", "").split(" ")
    for s in splits:
        if s in cities:
            return s
    return "NaN"

df["Adress"].apply(lookup_cities, args=(german_cities,))

现在,如果您找到了任何"NaN",那么要么是文档中的一个城市有一个错误,要么是几种编写它的方法,您将不得不自己进行调查。

P.S:我必须删除城市文件中的所有空格,否则名字就不匹配了。这只是我的编辑中使用查找和替换所有内容的问题。

票数 1
EN

Stack Overflow用户

发布于 2022-11-01 12:36:14

可以使用正则表达式提取城市名称,因为它们是由**指示的。

代码语言:javascript
运行
复制
import re 
import pandas

df = pd.DataFrame({"Adresse": ["Karlstr 10, 10 B, 30,; 04916 **Hamburg**", "**München** Dorfstr. 28-55, 22555", "Marnstraße. Berlin 12, 45666 **Berlin**", "Musterstr, 24855 **Dresden**"]})

df['Cities'] = [re.findall(r".*\*\*(.*)\*\*", address)[0] for address in df['Adresse']]

这导致:

代码语言:javascript
运行
复制
df
                                    Adresse   Cities
0  Karlstr 10, 10 B, 30,; 04916 **Hamburg**  Hamburg
1         **München** Dorfstr. 28-55, 22555  München
2   Marnstraße. Berlin 12, 45666 **Berlin**   Berlin
3              Musterstr, 24855 **Dresden**  Dresden
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74275857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档