如何将一列分成两列?

如何将一列分成两列?

我有一个列的数据框架,我想将它分成两列,其中一个列标题为‘fips'另一个'row'


我的数据df看起来是这样的:


          row

0    00000 UNITED STATES

1    01000 ALABAMA

2    01001 Autauga County, AL

3    01003 Baldwin County, AL

4    01005 Barbour County, AL

我不知道怎么用df.row.str[:]以实现拆分行单元格的目标。我可以用df['fips'] = hello添加新列并将其填充到hello..有什么想法吗?


         fips       row

0    00000 UNITED STATES

1    01000 ALABAMA 

2    01001 Autauga County, AL

3    01003 Baldwin County, AL

4    01005 Barbour County, AL


RISEBY
浏览 936回答 3
3回答

翻过高山走不出你

对于以下简单情况:我有一个带有分隔符的文本列,我想要两个列最简单的解决办法是:df['A'], df['B'] = df['AB'].str.split(' ', 1).str或者,您可以为拆分的每个条目自动创建一个带有一列的DataFrame,方法如下:df['AB'].str.split(' ', 1, expand=True)注意,在任何一种情况下,.tolist()方法是不必要的。也不是zip().详细情况:安迪·海登解在展示str.extract()方法。但是对于已知分隔符上的简单拆分(例如,用破折号拆分或用空格拆分),则.str.split()方法就足够了1..它对字符串的列(序列)进行操作,并返回列表的列(序列):>>> import pandas as pd>>> df = pd.DataFrame({'AB': ['A1-B1', 'A2-B2']})>>> df       AB0  A1-B11  A2-B2>>> df['AB_split'] = df['AB'].str.split('-')>>> df       AB  AB_split0  A1-B1  [A1, B1]1  A2-B2  [A2, B2]如果你不确定前两个参数是什么.str.split()做,我推荐给你的医生方法的普通Python版本.但你是怎么做到的:包含两个元素列表的列。致:两个列,每个列都包含列表的各个元素?好吧,我们需要仔细看看.str列的属性。它是一个神奇的对象,用于收集将列中的每个元素作为字符串处理的方法,然后尽可能有效地在每个元素中应用相应的方法:>>> upper_lower_df = pd.DataFrame({"U": ["A", "B", "C"]})>>> upper_lower_df    U0  A1  B2  C>>> upper_lower_df["L"] = upper_lower_df["U"].str.lower()>>> upper_lower_df    U  L0  A  a1  B  b2  C  c但它还有一个“索引”接口,用于通过索引获取字符串的每个元素:>>> df['AB'].str[0]0    A1    AName: AB, dtype: object>>> df['AB'].str[1]0    11    2Name: AB, dtype: object当然,这个索引接口.str并不真正关心它所索引的每个元素是否实际上是一个字符串,只要它可以被索引,所以:>>> df['AB'].str.split('-', 1).str[0]0    A11    A2Name: AB, dtype: object>>> df['AB'].str.split('-', 1).str[1]0     B11    B2Name: AB, dtype: object然后,简单地利用Python元组解压缩迭代来完成>>> df['A'], df['B'] = df['AB'].str.split('-', 1).str>>> df       AB  AB_split   A   B0  A1-B1  [A1, B1]  A1  B11  A2-B2  [A2, B2]  A2  B2当然,从拆分字符串列中获取DataFrame是非常有用的,因此.str.split()方法可以使用expand=True参数:>>> df['AB'].str.split('-', 1, expand=True)     0   10  A1  B11  A2  B2因此,实现我们想要的另一种方法是:>>> df = df[['AB']]>>> df       AB0  A1-B11  A2-B2>>> df.join(df['AB'].str.split('-', 1, expand=True).rename(columns={0:'A', 1:'B'}))       AB   A   B0  A1-B1  A1  B11  A2-B2  A2  B2

交互式爱情

你可以的提取液使用regex模式,不同的部分非常整齐地分开:In&nbsp;[11]:&nbsp;df.row.str.extract('(?P<fips>\d{5})((?P<state>[A-Z&nbsp;]*$)|(?P<county>.*?),&nbsp;(?P<state_code>[A-Z]{2}$))')Out[11]:&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;fips&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;county&nbsp;state_code0&nbsp;&nbsp;00000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNITED&nbsp;STATES&nbsp;&nbsp;&nbsp;UNITED&nbsp;STATES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NaN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NaN1&nbsp;&nbsp;01000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALABAMA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALABAMA&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NaN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NaN2&nbsp;&nbsp;01001&nbsp;&nbsp;&nbsp;Autauga&nbsp;County,&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NaN&nbsp;&nbsp;&nbsp;Autauga&nbsp;County&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL3&nbsp;&nbsp;01003&nbsp;&nbsp;&nbsp;Baldwin&nbsp;County,&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NaN&nbsp;&nbsp;&nbsp;Baldwin&nbsp;County&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL4&nbsp;&nbsp;01005&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Barbour&nbsp;County,&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NaN&nbsp;&nbsp;&nbsp;Barbour&nbsp;County&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL[5&nbsp;rows&nbsp;x&nbsp;5&nbsp;columns]为了解释这个稍长的正则表达式:(?P<fips>\d{5})匹配五位数(\d)并给他们起名字"fips".下一部分:((?P<state>[A-Z&nbsp;]*$)|(?P<county>.*?),&nbsp;(?P<state_code>[A-Z]{2}$))也不是(|)两件事之一:(?P<state>[A-Z&nbsp;]*$)匹配任何数字(*)大写字母或空格([A-Z ]),并将其命名为"state"在字符串结束之前($),或(?P<county>.*?),&nbsp;(?P<state_code>[A-Z]{2}$))匹配其他任何东西(.*)然后一个逗号和一个空格匹配两位数state_code在字符串结束之前($).在本例中:请注意,前两行命中了“state”(将nan保留在县中和state_code列中),而最后三行则命中了县(State_Code)(将nan保留在State列中)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python