相关疑难解决方法(0)

Python Pandas,创建指定列dtypes的空DataFrame

有一件事我发现自己必须经常这样做,令我惊讶的是,在熊猫中实现这一目标是多么困难.假设我需要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)

第二个问题.在熊猫中这种语法是否可行?如果不是,开发人员是否考虑支持这样的事情?我觉得它真的应该像这样简单(上面的语法).

python dataframe pandas

12
推荐指数
2
解决办法
6612
查看次数

使用from_dict分配dtype

我在python字典中有数据,如:

data = {u'01-01-2017 22:34:43:871': [u'88.49197', u'valid'],
        u'01-01-2017 11:23:43:803': [u'88.49486', u'valid'],
        u'02-01-2017 03:11:43:898': [u'88.49773', u'valid'],
        u'01-01-2017 13:54:43:819': [u'88.50205', u'valid']}
Run Code Online (Sandbox Code Playgroud)

我可以将它转换为pandas Dataframe:

data = pandas.DataFrame.from_dict(data, orient='index')
Run Code Online (Sandbox Code Playgroud)

但是我无法使用dtype参数from_dict.我会将索引转换datetime为类似的第一列浮点数,第三列转换为字符串.

我试过了:

pandas.DataFrame.from_dict((data.values()[0]), orient='index', 
                                               dtype={0: 'float', 1:'str'})
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

python pandas

10
推荐指数
1
解决办法
1821
查看次数

从 pd.DataFrame 设置 dtypes 给出 TypeError: object of type 'type' has no len()

假设我有一个数据框,并且想将数据类型设置为所有列,就像我调用read_csv方法一样。为了简单起见,同样的错误TypeError: object of type 'type' has no len() 给出了这段代码:

df = pd.DataFrame([1,2,2,3], columns = ['num'], dtype={'num':int})
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题以及如何让它发挥作用?

完整的错误堆栈:

TypeError                                 Traceback (most recent call last)
<ipython-input-42-e8a84bf74364> in <module>()
----> 1 df = pd.DataFrame([1,2,2,3], columns = ['num'], dtype={'num':int})

C:\Anaconda3\lib\site-packages\pandas\core\frame.py in __init__(self, data, index, columns, dtype, copy)
    264             data = {}
    265         if dtype is not None:
--> 266             dtype = self._validate_dtype(dtype)
    267 
    268         if isinstance(data, DataFrame):

C:\Anaconda3\lib\site-packages\pandas\core\generic.py in _validate_dtype(self, dtype)
    145 
    146         if dtype is not None:
--> 147 …
Run Code Online (Sandbox Code Playgroud)

python types runtime-error python-3.x pandas

5
推荐指数
1
解决办法
5269
查看次数

标签 统计

pandas ×3

python ×3

dataframe ×1

python-3.x ×1

runtime-error ×1

types ×1