python-3.x - 如何从每列由正则表达式创建的列表中创建 DataFrame
问题描述
我有一个这样的清单:
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:
解决方案
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)
推荐阅读
- python - 平滑折线图中的曲线 - 值区间 x 轴
- java - 未找到 [SaajSoapMessage 的端点映射
- java - 如何在 Spring Integration 中对 Rabbit MQ 消息侦听器强制执行严格排序?
- jackson - 使用 Jackson 格式化 YAML
- r - Shiny:有条件地构建 UI
- python - 如果区域边界未知,如何使用散景创建等值线图
- python - df 类型不会永久更改为 int
- android - 如何将视图宽度设置为父宽度的百分比 - ConstraintLayout 中的边距空间?
- php - PHP - 当 URL 在浏览器上工作时,jpeg 文件的 file_get_contents 返回 false
- c++ - 如何在 C++ 中解压 uint32_t 颜色