python - 使用列表与字典的数据框
问题描述
import pandas as pd
pincodes = [800678,800456]
numbers = [2567890, 256757]
labels = ['R','M']
first = pd.DataFrame({'Number':numbers, 'Pincode':pincodes},
index=labels)
print(first)
上面的代码给了我以下(正确的)数据框。
Number Pincode
R 2567890 800678
M 256757 800456
但是,当我使用这个语句时,
second = pd.DataFrame([numbers,pincodes],
index=labels, columns=['Number','Pincode'])
print(second)
然后我得到以下(不正确的)输出。
Number Pincode
R 2567890 256757
M 800678 800456
如您所见,这两个数据框是不同的。为什么会这样?这本字典与列表方法有什么不同?
解决方案
的构造函数pd.DataFrame()
包括此文档。
Init signature: pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
Docstring:
...
Parameters
----------
data : ndarray (structured or homogeneous), Iterable, dict, or DataFrame
Dict can contain Series, arrays, constants, or list-like objects
.. versionchanged :: 0.23.0
If data is a dict, column order follows insertion-order for
Python 3.6 and later.
.. versionchanged :: 0.25.0
If data is a list of dicts, column order follows insertion-order
for Python 3.6 and later.
关键字是column。在第一种方法中,您正确地告诉 pandas 那numbers
是带有 label 的列'Numbers'
。但是在第二种方法中,您告诉 pandas 列是'Numbers'
and'Pincode'
并从列表列表中获取数据[numbers, pincodes]
。此列表列表的第一列'Numbers'
分配给该列,第二列分配给该'Pincode'
列。
如果您想以这种方式输入数据(而不是作为字典),则需要转置列表列表。
>>> import numpy as np
# old way
>>> pd.DataFrame([numbers,pincodes],
index=labels,columns=['Number','Pincode'])
Number Pincode
R 2567890 256757
M 800678 800456
# Transpose the data instead so the rows become the columns.
>>> pd.DataFrame(np.transpose([numbers,pincodes]),
index=labels,columns=['Number','Pincode'])
Number Pincode
R 2567890 800678
M 256757 800456
推荐阅读
- javascript - 'cursor' 选项是来自每个聚合的必需错误
- java - 使用 marklogic java 客户端 api 处理 DOM
- json - 解析更复杂的嵌套响应
- r - 如何为 https://www.rdocumentation.org 中引用的函数查找 R 包
- ios - CloudKit 公共数据库 TestFlight 与 App Store
- python - Python中的星号三角形(使用递归)
- javascript - Bootstrap 单字文本框
- java - Scala - 如何将回调传递给方法
- python - Pandas 仅选择 idxmin+1(倒数第 n 个)值
- angularjs - symfony webpack 再来一次 angularJS