Ray*_*Ray 12 python dataframe pandas
有一件事我发现自己必须经常这样做,令我惊讶的是,在熊猫中实现这一目标是多么困难.假设我需要DataFrame使用指定的索引类型和名称以及列类型和名称创建一个空.(我可能想稍后在循环中填充它.例如.)我发现,最简单的方法是pandas.Series为每个列创建一个空对象,指定它们的dtypes,将它们放入一个字典中,指定它们名称,并将字典传递给DataFrame构造函数.像下面这样的东西.
def create_empty_dataframe():
index = pandas.Index([], name="id", dtype=int)
column_names = ["name", "score", "height", "weight"]
series = [pandas.Series(dtype=str), pandas.Series(dtype=int), pandas.Series(dtype=float), pandas.Series(dtype=float)]
columns = dict(zip(column_names, series))
return pandas.DataFrame(columns, index=index, columns=column_names)
# The columns=column_names is required because the dictionary will in general put the columns in arbitrary order.
Run Code Online (Sandbox Code Playgroud)
第一个问题.上面真的是最简单的方法吗?关于这一点有很多令人费解的事情.我真正想做的事情,以及我很确定很多人真正想要做的事情,就像下面这样.
df = pandas.DataFrame(columns=["id", "name", "score", "height", "weight"], dtypes=[int, str, int, float, float], index_column="id")
Run Code Online (Sandbox Code Playgroud)
第二个问题.在熊猫中这种语法是否可行?如果不是,开发人员是否考虑支持这样的事情?我觉得它真的应该像这样简单(上面的语法).
您可以使用字典来简化事情:
def create_empty_dataframe():
index = pandas.Index([], name="id", dtype=int)
# specify column name and data type
columns = [('name', str),
('score', int),
('height', float),
('weight', float)]
# create the dataframe from a dict
return pandas.DataFrame({k: pandas.Series(dtype=t) for k, t in columns})
Run Code Online (Sandbox Code Playgroud)
这样,应该更容易创建任意数据帧,而无需修改代码中的多个位置。
不幸的是,DateFramector 接受单个dtype描述符,但是您可以使用read_csv以下方法作弊:
In [143]:
import pandas as pd
import io
cols=["id", "name", "score", "height", "weight"]
df = pd.read_csv(io.StringIO(""), names=cols, dtype=dict(zip(cols,[int, str, int, float, float])), index_col=['id'])
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 0 entries
Data columns (total 4 columns):
name 0 non-null object
score 0 non-null int32
height 0 non-null float64
weight 0 non-null float64
dtypes: float64(2), int32(1), object(1)
memory usage: 0.0+ bytes
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到 dtypes 是所需的,并且索引是根据需要设置的:
In [145]:
df.index
Out[145]:
Int64Index([], dtype='int64', name='id')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6612 次 |
| 最近记录: |