从文本中创建一个带有指定标签的字典数据框。

3
我想创建一个有定义标签的数据框。不知道如何告诉Pandas从列表中获取标签。希望有人可以帮忙。
import numpy as np
import pandas as pd


df = []
thislist = []

thislist = ["A","D"]
thisdict =  {
             "A": [1, 2, 3],
             "B": [4, 5, 6],
             "C": [7, 8, 9],
             "D": [7, 8, 9]
            }

df = pd.DataFrame(data= thisdict[thislist])  # <- here is my problem

我想获取这个:

df = A   D
     1   7
     2   8
     3   9

1
一个解决方法是使用 pd.DataFrame.from_dict(data) 构建数据框,然后只需对你想要的列进行切片 df = df['A','D'] - Yuca
5个回答

8

使用:

df = pd.DataFrame(thisdict)[thislist]
print(df)
   A  D
0  1  7
1  2  8
2  3  9

我们也可以使用 DataFrame.drop
df = pd.DataFrame(thisdict).drop(columns = ['B','C'])

或者使用DataFrame.reindex方法。

df = pd.DataFrame(thisdict).reindex(columns = thislist)

或者 DataFrame.filter

df = pd.DataFrame(thisdict).filter(items=thislist)

我们还可以使用filter来过滤thisdict.items()

df = pd.DataFrame(dict(filter(lambda item: item[0] in thislist, thisdict.items())))
print(df)
   A  D
0  1  7
1  2  8
2  3  9

我认为这个答案已经得到了@anky_91的解决方案。
最后,我建议您查看如何对索引进行操作

4

如果我理解正确,可以在数据框构造函数中使用.loc[]

df = pd.DataFrame(thisdict).loc[:,thislist]

print(df)
   A  D
0  1  7
1  2  8
2  3  9

4
使用字典推导式创建一个新的字典,该字典是原始字典的子集,因此您只需要构建您关心的DataFrame。
pd.DataFrame({x: thisdict[x] for x in thislist})
   A  D
0  1  7
1  2  8
2  3  9

如果您想处理可能缺失的键,可以添加一些逻辑,使其类似于重新索引
pd.DataFrame({x: thisdict[x] if x in thisdict.keys() else np.NaN for x in thislist})

2
df = pd.DataFrame(thisdict)
df[['A', 'D']]

1
另一个输入的选择:
thislist = ["A","D"]
thisdict =  {
             "A": [1, 2, 3],
             "B": [4, 5, 6],
             "C": [7, 8, 9],
             "D": [7, 8, 9]
            }

df = pd.DataFrame(thisdict) 

然后,只需删除不在列表中的列(您可以直接从数据框中执行此操作或对它们进行聚合):
remove_columns = []
for c in df.columns:
    if c not in thislist:
        remove_columns.append(c)

并将其移除:

df.drop(columns=remove_columns, inplace=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接