为什么我们需要将压缩对象转换为列表

时间:2018-03-24 05:35:29

标签: python pandas

我正在尝试完成数据广播练习,我需要将2个列表转换为zip object,然后转换为dict,最后使用pandas获得dataframe

但是,如果我在列表上使用zip()函数并将它们转换为dict然后转换为数据帧,我会得到没有错误但只是简单的完美外观数据帧。 但是说明说我必须首先将压缩对象转换为列表,然后将其转换为dict()

我不明白这对我有什么帮助,因为我每次都得到相同的输出。即数据框 I am using python3

使用list()

list_keys = ['Country', 'Total']
list_values = [['United States', 'Soviet Union', 'United Kingdom'], [1118, 473, 273]]

import pandas as pd

zipped = list(zip(list_keys,list_values))

# Inspect the list using print()
print(zipped)

# Build a dictionary with the zipped list: data
data = dict(zipped)

# Build and inspect a DataFrame from the dictionary: df
df = pd.DataFrame(data)
print(df)

output:

[('Country', ['United States', 'Soviet Union', 'United Kingdom']), ('Total', [1118, 473, 273])]
          Country  Total
0   United States   1118
1    Soviet Union    473
2  United Kingdom    273

没有list()

zipped = zip(list_keys,list_values)

# Inspect the list using print()
print(zipped)

# Build a dictionary with the zipped list: data
data = dict(zipped)

# Build and inspect a DataFrame from the dictionary: df
df = pd.DataFrame(data)
print(df)

output:

<zip object at 0x10c069648>
          Country  Total
0   United States   1118
1    Soviet Union    473
2  United Kingdom    273

1 个答案:

答案 0 :(得分:1)

我认为dict(zipped)zip objectlist object转换为dictionary。所以这里转换为list是多余的。

但是如果想要DataFrame zip中的python 3对象创建list则有问题,需要首先转换为tuple的{​​{1}}:

a = ['United States', 'Soviet Union', 'United Kingdom']
b = [1118, 473, 273]
c = ['Country', 'Total']

zipped = zip(a,b)
print(zipped)
<zip object at 0x000000000DC4E8C8>

df = pd.DataFrame(zipped, columns=c)
print(df)
TypeError: data argument can't be an iterator
print(list(zipped))
[('United States', 1118), ('Soviet Union', 473), ('United Kingdom', 273)]

df = pd.DataFrame(list(zipped), columns=c)
print(df)

          Country  Total
0   United States   1118
1    Soviet Union    473
2  United Kingdom    273