为了账号安全,请及时绑定邮箱和手机立即绑定

使用特定模式从txt文件创建Pandas DataFrame

使用特定模式从txt文件创建Pandas DataFrame

慕斯王 2019-07-09 15:37:40
使用特定模式从txt文件创建Pandas DataFrame我需要基于以下结构的文本文件创建一个PandasDataFrame:Alabama[edit]Auburn (Auburn University)[1]Florence (University of North Alabama)Jacksonville (Jacksonville State University)[2]Livingston (University of West Alabama)[2]Montevallo (University of Montevallo)[2]Troy (Troy University)[2]Tuscaloosa (University of Alabama, Stillman College, Shelton State)[3][4]Tuskegee (Tuskegee University)[5]Alaska[edit]Fairbanks (University of Alaska Fairbanks)[2]Arizona[edit]Flagstaff (Northern Arizona University)[6]Tempe (Arizona State University)Tucson (University of Arizona)Arkansas[edit]带有“[编辑]”的行是国家,行[数字]是区域。我需要将以下内容分开,然后对每个区域名称重复国家名称。Index          State          Region Name0              Alabama        Aurburn...1              Alabama        Florence...2              Alabama        Jacksonville......9              Alaska         Fairbanks...10             Alaska         Arizona...11             Alaska         Flagstaff...熊猫数据帧我不知道如何将基于“[编辑]”和“[数字]”或“(字符)”的文本文件拆分到相应的列中,并对每个区域名称重复国家名称。请任何人给我一个起点开始完成以下工作。
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

您可以首先将文件解析为元组:

import pandas as pdfrom collections import namedtupleItem = namedtuple('Item', 'state area')items = []with open('unis.txt') as f: 
    for line in f:
        l = line.rstrip('\n') 
        if l.endswith('[edit]'):
            state = l.rstrip('[edit]')
        else:            
            i = l.index(' (')
            area = l[:i]
            items.append(Item(state, area))df = pd.DataFrame.from_records(items, columns=['State', 'Area'])print df

产出:

      State          Area

0   Alabama        Auburn

1   Alabama      Florence

2   Alabama  Jacksonville

3   Alabama    Livingston

4   Alabama    Montevallo

5   Alabama          Troy

6   Alabama    Tuscaloosa

7   Alabama      Tuskegee

8    Alaska     Fairbanks

9   Arizona     Flagstaff

10  Arizona         Tempe

11  Arizona        Tucson


查看完整回答
反对 回复 2019-07-09
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

假设您有以下DF:


In [73]: df

Out[73]:

                                                 text

0                                       Alabama[edit]

1                       Auburn (Auburn University)[1]

2              Florence (University of North Alabama)

3     Jacksonville (Jacksonville State University)[2]

4          Livingston (University of West Alabama)[2]

5            Montevallo (University of Montevallo)[2]

6                           Troy (Troy University)[2]

7   Tuscaloosa (University of Alabama, Stillman Co...

8                   Tuskegee (Tuskegee University)[5]

9                                        Alaska[edit]

10      Fairbanks (University of Alaska Fairbanks)[2]

11                                      Arizona[edit]

12         Flagstaff (Northern Arizona University)[6]

13                   Tempe (Arizona State University)

14                     Tucson (University of Arizona)

15                                     Arkansas[edit]

你可以用Series.str.export()方法:


In [117]: df['State'] = df.loc[df.text.str.contains('[edit]', regex=False), 'text'].str.extract(r'(.*?)\[edit\]', expand=False)


In [118]: df['Region Name'] = df.loc[df.State.isnull(), 'text'].str.extract(r'(.*?)\s*[\(\[]+.*[\n]*', expand=False)


In [120]: df.State = df.State.ffill()


In [121]: df

Out[121]:

                                                 text     State   Region Name

0                                       Alabama[edit]   Alabama           NaN

1                       Auburn (Auburn University)[1]   Alabama        Auburn

2              Florence (University of North Alabama)   Alabama      Florence

3     Jacksonville (Jacksonville State University)[2]   Alabama  Jacksonville

4          Livingston (University of West Alabama)[2]   Alabama    Livingston

5            Montevallo (University of Montevallo)[2]   Alabama    Montevallo

6                           Troy (Troy University)[2]   Alabama          Troy

7   Tuscaloosa (University of Alabama, Stillman Co...   Alabama    Tuscaloosa

8                   Tuskegee (Tuskegee University)[5]   Alabama      Tuskegee

9                                        Alaska[edit]    Alaska           NaN

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

11                                      Arizona[edit]   Arizona           NaN

12         Flagstaff (Northern Arizona University)[6]   Arizona     Flagstaff

13                   Tempe (Arizona State University)   Arizona         Tempe

14                     Tucson (University of Arizona)   Arizona        Tucson

15                                     Arkansas[edit]  Arkansas           NaN


In [122]: df = df.dropna()


In [123]: df

Out[123]:

                                                 text    State   Region Name

1                       Auburn (Auburn University)[1]  Alabama        Auburn

2              Florence (University of North Alabama)  Alabama      Florence

3     Jacksonville (Jacksonville State University)[2]  Alabama  Jacksonville

4          Livingston (University of West Alabama)[2]  Alabama    Livingston

5            Montevallo (University of Montevallo)[2]  Alabama    Montevallo

6                           Troy (Troy University)[2]  Alabama          Troy

7   Tuscaloosa (University of Alabama, Stillman Co...  Alabama    Tuscaloosa

8                   Tuskegee (Tuskegee University)[5]  Alabama      Tuskegee

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

12         Flagstaff (Northern Arizona University)[6]  Arizona     Flagstaff

13                   Tempe (Arizona State University)  Arizona         Tempe

14                     Tucson (University of Arizona)  Arizona        Tucson


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 1486 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信