pandas 如何在python中将一个链表转换为 Dataframe ?

eqzww0vc  于 2022-12-09  发布在  Python
关注(0)|答案(4)|浏览(183)

我有这样一条蟒敕令:

d = {"a": [1,2,3], "b": [4,5,6]}

我想在 Dataframe 中进行如下转换:
| 字母|号码|
| - -|- -|
| 一种|一个|
| 一种|2个|
| 一种|三个|
| B|四个|
| B|五个|
| B|六个|
我试过这个代码:

df = pd.DataFrame.from_dict(vulnerabilidade, orient = 'index').T

但这给了我:
| 一种|一个|
| - -|- -|
| 2个|三个|
| B|四个|
| 五个|六个|

qyuhtwio

qyuhtwio1#

您可以随时读取数据,就像您已经读取过的数据一样,然后.melt
当传递no id_varsvalue_vars时,melt会将每个列转换为它们自己的行。

import pandas as pd

d = {"a": [1,2,3], "b": [4,5,6]}
out = pd.DataFrame(d).melt(var_name='letter', value_name='value')

print(out)
  letter  value
0      a      1
1      a      2
2      a      3
3      b      4
4      b      5
5      b      6
kmpatx3s

kmpatx3s2#

要使用“letter”和“number”作为列标签,可以用途:

a2 = [[key, val] for key, x in d.items() for val in x]
dict2 = pd.DataFrame(a2, columns = ['letter', 'number'])

其给出了

letter  number
0      a       1
1      a       2
2      a       3
3      b       4
4      b       5
5      b       6
uqxowvwt

uqxowvwt3#

还有一种可能的解决方案:

(pd.Series(d, index=d.keys(), name='numbers')
 .rename_axis('letters').reset_index()
 .explode('numbers', ignore_index=True))

输出量:

letters numbers
0       a       1
1       a       2
2       a       3
3       b       4
4       b       5
5       b       6
t3psigkw

t3psigkw4#

这将产生你想要的结果(不过可能有一个更简单的方法):

import pandas as pd
my_dict = {"a": [1,2,3], "b": [4,5,6]}

my_list = [[key, val] for key in my_dict for val in my_dict[key] ]
df = pd.DataFrame(my_list, columns=['letter','number'])

df
# Out[106]: 
#   letter  number
# 0      a       1
# 1      a       2
# 2      a       3
# 3      b       4
# 4      b       5
# 5      b       6

相关问题