将 python 列表转换为 pandas 数据框,从列表中选择特定字符串

发布于 2025-01-12 15:45:10 字数 712 浏览 0 评论 0原文

我有以下 python 列表:

w=[[['I=427', 'PLAN=1'], 'A=0PDB'],
 [['I=427', 'PLAN=1'], 'B=40NGC'],
 [['I=427', 'PLAN=1'], 'C=21#NGA'],
 [['I=429', 'PLAN=1'], 'A=0PDB'],
 [['I=429', 'PLAN=1'], 'B=18C'],
 [['I=429', 'PLAN=1'], 'C=28TGD'],
 [['I=429', 'PLAN=1'], 'D=18TGA'],
 [['I=429', 'PLAN=1'], 'E=1A'],
 [['I=429', 'PLAN=2'], 'A=0PDB'],
 [['I=429', 'PLAN=2'], 'B=17C']]

如何将其转换为以下 pandas DataFrame:

在此处输入图像描述

因此,从列表中的第二个字符串中,我想选择第一个字符串、等号后的数字和最后一个字符串。例如在 B=40NGC 中,我想选择 B40C 并将其放入 DataFrame 中。

I have the below python list:

w=[[['I=427', 'PLAN=1'], 'A=0PDB'],
 [['I=427', 'PLAN=1'], 'B=40NGC'],
 [['I=427', 'PLAN=1'], 'C=21#NGA'],
 [['I=429', 'PLAN=1'], 'A=0PDB'],
 [['I=429', 'PLAN=1'], 'B=18C'],
 [['I=429', 'PLAN=1'], 'C=28TGD'],
 [['I=429', 'PLAN=1'], 'D=18TGA'],
 [['I=429', 'PLAN=1'], 'E=1A'],
 [['I=429', 'PLAN=2'], 'A=0PDB'],
 [['I=429', 'PLAN=2'], 'B=17C']]

How can I convert it to the below pandas DataFrame:

enter image description here

So, from the second string in the list I want to select the first string, the number after equal sign and the last string. For example in B=40NGC, I want to choose B,40,C and put it into the DataFrame.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮生未歇 2025-01-19 15:45:10

这是一种方法:

稍微修改一下 w 以创建列表列表并构建 DataFrame。然后从 green_time 列中提取数字:

out = []
for lst, s in w:
    phase, rest = s.split('=')
    green_time, next_phase = rest[:-1], rest[-1]
    out.append(lst + [phase, green_time, next_phase])
out = pd.DataFrame(out, columns=['site_no', 'plan', 'phase', 'green_time','next_phase'])
out['green_time'] = out['green_time'].str.extract('(\d+)')

或者,我们可以将 w 传递给 DataFrame 构造函数,并使用 str.extract 提取中的相关项目列:

df = pd.DataFrame(w)
df = df.join(pd.DataFrame(df[0].tolist(), columns=['site_no', 'plan']))
df[['phase', 'green_time','next_phase']] = df[1].str.extract('(\w)=(\d+)([^0-9]+)')
df['next_phase'] = df['next_phase'].str[-1]
df = df.drop(columns=[0,1])

输出:

  site_no    plan phase green_time next_phase
0   I=427  PLAN=1     A          0          B
1   I=427  PLAN=1     B         40          C
2   I=427  PLAN=1     C         21          A
3   I=429  PLAN=1     A          0          B
4   I=429  PLAN=1     B         18          C
5   I=429  PLAN=1     C         28          D
6   I=429  PLAN=1     D         18          A
7   I=429  PLAN=1     E          1          A
8   I=429  PLAN=2     A          0          B
9   I=429  PLAN=2     B         17          C

Here's one approach:

Rework w a bit to create a list of lists and build a DataFrame. Then extract a digits from green_time column:

out = []
for lst, s in w:
    phase, rest = s.split('=')
    green_time, next_phase = rest[:-1], rest[-1]
    out.append(lst + [phase, green_time, next_phase])
out = pd.DataFrame(out, columns=['site_no', 'plan', 'phase', 'green_time','next_phase'])
out['green_time'] = out['green_time'].str.extract('(\d+)')

Alternatively, we could pass w to the DataFrame constructor and use str.extract to extract the relevant items in columns:

df = pd.DataFrame(w)
df = df.join(pd.DataFrame(df[0].tolist(), columns=['site_no', 'plan']))
df[['phase', 'green_time','next_phase']] = df[1].str.extract('(\w)=(\d+)([^0-9]+)')
df['next_phase'] = df['next_phase'].str[-1]
df = df.drop(columns=[0,1])

Output:

  site_no    plan phase green_time next_phase
0   I=427  PLAN=1     A          0          B
1   I=427  PLAN=1     B         40          C
2   I=427  PLAN=1     C         21          A
3   I=429  PLAN=1     A          0          B
4   I=429  PLAN=1     B         18          C
5   I=429  PLAN=1     C         28          D
6   I=429  PLAN=1     D         18          A
7   I=429  PLAN=1     E          1          A
8   I=429  PLAN=2     A          0          B
9   I=429  PLAN=2     B         17          C
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文