【问题标题】:How to create a DataFrame from a list that each column is created by a regex expression如何从每列由正则表达式创建的列表中创建 DataFrame
【发布时间】:2021-02-17 19:34:33
【问题描述】:

我有一个这样的列表:

lst = ['2021_01_21__11_10_54_1__13928_snapshot.jpg',
       '2021_01_21__12_27_44_1__13934_snapshot.jpg',
       '2021_01_21__11_11_08_2__13928_snapshot.jpg',
       '2021_01_21__12_27_56_2__13934_snapshot.jpg',
       '2021_01_21__11_11_19_3__13928_snapshot.jpg',
       '2021_01_21__12_28_08_3__13934_snapshot.jpg']

我想创建一个 DataFrame 以便每一列都表示为:

def by_number(path):
    base_name = os.path.basename(path)
    return re.findall('[\_]{2}(\d{5})',lst)

而行将由以下形式表示:

def by_index(path):
    base_name = os.path.basename(path)
    return re.findall('\_(\d)[\_]{2}',lst)

所以最终我会得到一个看起来像这样的 DataFrame:

【问题讨论】:

  • 你能举个例子吗?不清楚
  • 是的,按照您的要求进行了编辑
  • 希望这能解决您的问题。我花了 30 分钟才解决它。

标签: python-3.x regex dataframe


【解决方案1】:
name_list = ['2021_01_21__11_10_54_1__13928_snapshot.jpg',
       '2021_01_21__12_27_44_1__13934_snapshot.jpg',
       '2021_01_21__11_11_08_2__13928_snapshot.jpg',
       '2021_01_21__12_27_56_2__13934_snapshot.jpg',
       '2021_01_21__11_11_19_3__13928_snapshot.jpg',
       '2021_01_21__12_28_08_3__13934_snapshot.jpg']

import re
import pandas as pd

df = pd.DataFrame([[0]], columns=['count']) # initialize dataframe

for name in name_list:
    count = re.search('\_(\d)[\_]{2}',name).group(1)
    col = re.search('[\_]{2}(\d{5})',name).group(1)
    if ((df['count'] == count)).any():
        df.loc[df['count'] == count, col] = name
    else:
        new_row = pd.DataFrame([[count,name]], columns=['count',col])
        df = df.append(new_row)
df.set_index('count', inplace=True)
print(df)

【讨论】:

  • 你可以在完成后删除第一行,df = df.iloc[1:]
猜你喜欢
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 2019-04-01
  • 1970-01-01
  • 2020-03-17
  • 2010-10-01
  • 1970-01-01
相关资源
最近更新 更多