Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按照特定模式从列中提取字符串_Python_String_Pandas_Dataframe_Split - Fatal编程技术网

Python 按照特定模式从列中提取字符串

Python 按照特定模式从列中提取字符串,python,string,pandas,dataframe,split,Python,String,Pandas,Dataframe,Split,请原谅我的熊猫新手问题,但我有一列美国城镇和州,如下图所示的截断版本(出于某种奇怪的原因,该列的名称称为“Alabama[edit]”,与该列中的前0-7个城镇值关联): 每个州的城镇位于每个州名称的下方,例如,费尔班克斯(列值9)是阿拉斯加州的城镇 我想做的是根据州名称划分城镇名称,这样我有两列“state”和“RegionName”,其中每个州名称与每个城镇名称关联,如下所示: RegionName

请原谅我的熊猫新手问题,但我有一列美国城镇和州,如下图所示的截断版本(出于某种奇怪的原因,该列的名称称为“Alabama[edit]”,与该列中的前0-7个城镇值关联):

每个州的城镇位于每个州名称的下方,例如,费尔班克斯(列值9)是阿拉斯加州的城镇

我想做的是根据州名称划分城镇名称,这样我有两列“state”和“RegionName”,其中每个州名称与每个城镇名称关联,如下所示:

                            RegionName                       State
0                          Auburn (Auburn University)[1]    Alabama
1                 Florence (University of North Alabama)    Alabama
2        Jacksonville (Jacksonville State University)[2]    Alabama
3             Livingston (University of West Alabama)[2]    Alabama
4               Montevallo (University of Montevallo)[2]    Alabama
5                              Troy (Troy University)[2]    Alabama
6      Tuscaloosa (University of Alabama, Stillman Co...    Alabama
7                      Tuskegee (Tuskegee University)[5]    Alabama

8         Fairbanks (University of Alaska Fairbanks)[2]     Alaska

9         Flagstaff (Northern Arizona University)[6]        Arizona
10                      Tempe (Arizona State University)    Arizona
11                        Tucson (University of Arizona)    Arizona                                              

12        Arkadelphia (Henderson State University, Ouach... Arkansas                                           
。等等

我知道每个州的名称后面都有一个字符串“[edit]”,我想我可以用它来分割和分配城镇名称。但我不知道怎么做


另外,我知道我还需要做很多其他的数据清理,比如删除括号内和括号“[]”内的字符串。这可以稍后再做……重要的部分是将各州和城镇分开,并将每个城镇分配到适当的美国。任何建议都将不胜感激。

如果没有太多上下文或访问您的数据,我建议您按照这些思路做些事情。首先,修改读取数据的代码:

df = pd.read_csv(..., header=None, names=['RegionName']) 
# add header=False so as to read the first row as data
现在,使用
str.extract
提取状态名,只要名称被子字符串“[edit]”继承,就应该只提取名称。然后可以使用
ffill
正向填充所有NaN值

df['State'] = df['RegionName'].str.extract(
    r'(?P<State>.*)(?=\s*\[edit\])'
).ffill()
df['State']=df['RegionName'].str.extract(
r'(?P.*)(?=\s*\[编辑\])”
).ffill()

我想看看您是如何加载这些数据的。你能给我看一下代码吗?当然可以。数据来自维基百科页面:。我正在使用pd.read_table('university_towns.txt')来读取数据(维基百科页面中的数据已经格式化为.txt文件)。好的,那么您的文本文件中是否只列出了大学?是的,文本文件显示了州名,后跟城镇名称和大学(我不需要大学,我需要在以后的数据清理过程中消除大学。)当你说设置header=False时,你的意思是header=None吗?当我尝试header=False时,它抛出了一个异常。天哪!太神奇了!str.extract成功了!你就是男人(或女人,视情况而定)!但是,在阅读正则表达式时,我还是有点生疏…我理解正则表达式搜索“”字符串,但是(?P.*)(?=\s*…)是什么意思?@bariumdose是的,谢谢。写这篇文章时没有进行任何测试,很高兴它起作用了!至于正则表达式,这很容易解释。它只是指定了一个命名的捕获组(你可以在DOC上查看这个概念),熊猫把它翻译成列名。如果你喜欢答案,也要考虑把它投上去。祝你好运!
df['State'] = df['RegionName'].str.extract(
    r'(?P<State>.*)(?=\s*\[edit\])'
).ffill()