python - 如何在 Pandas 数据框中的所有列中广播和分配一系列值?
问题描述
我知道这一定很容易,但我无法弄清楚或找到一个现有的答案......
说我有这个数据框......
>>> import pandas as pd
>>> import numpy as np
>>> dates = pd.date_range('20130101', periods=6)
>>> df = pd.DataFrame(np.nan, index=dates, columns=list('ABCD'))
>>> df
A B C D
2013-01-01 NaN NaN NaN NaN
2013-01-02 NaN NaN NaN NaN
2013-01-03 NaN NaN NaN NaN
2013-01-04 NaN NaN NaN NaN
2013-01-05 NaN NaN NaN NaN
2013-01-06 NaN NaN NaN NaN
设置一个系列的值很容易...
>>> df.loc[:, 'A'] = pd.Series([1,2,3,4,5,6], index=dates)
>>> df
A B C D
2013-01-01 1 NaN NaN NaN
2013-01-02 2 NaN NaN NaN
2013-01-03 3 NaN NaN NaN
2013-01-04 4 NaN NaN NaN
2013-01-05 5 NaN NaN NaN
2013-01-06 6 NaN NaN NaN
但是如何使用广播设置所有列的值?
>>> default_values = pd.Series([1,2,3,4,5,6], index=dates)
>>> df.loc[:, :] = default_values
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/billtubbs/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/indexing.py", line 189, in __setitem__
self._setitem_with_indexer(indexer, value)
File "/Users/billtubbs/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/indexing.py", line 651, in _setitem_with_indexer
value=value)
File "/Users/billtubbs/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/internals.py", line 3693, in setitem
return self.apply('setitem', **kwargs)
File "/Users/billtubbs/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/internals.py", line 3581, in apply
applied = getattr(b, f)(**kwargs)
File "/Users/billtubbs/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/internals.py", line 940, in setitem
values[indexer] = value
ValueError: could not broadcast input array from shape (6) into shape (6,4)
除了这些方式:
>>> for s in df:
... df.loc[:, s] = default_values
...
或者:
>>> df.loc[:, :] = np.vstack([default_values]*4).T
更新:
或者:
>>> df.loc[:, :] = default_values.values.reshape(6,1)
解决方案
使用 numpybroadcasting
s = pd.Series([1,2,3,4,5,6], index=dates)
df.loc[:,:] = s.values[:,None]
使用索引匹配
df.loc[:] = pd.concat([s]*df.columns.size, axis=1)
推荐阅读
- firebase - firebase Admin SDK 与 firebase 控制台网页有何不同?
- sql - TypeORM 无法删除具有 ManyToOne / OneToMany 关系的行
- mongodb - 对非常大的数据最有效的 MongoDB find() 查询
- autofill - 从 Excel 自动填充 Chrome
- c++ - 如何从 Windows 上的 .proto 文件生成 grpc 的 C++ 文件(使用 CMake 的跨平台方式)?
- go - Go 接口比较混乱
- visual-studio - Visual Studio 通过 ssh 在 ubuntu 上调试 .net 核心应用程序
- java - Android 应用程序开发支持哪些 Java 版本。我可以使用超过 1.8 或 java 8 的 java 版本吗
- unity3d - 如何在 Unity 中实现滑动?
- python - 如何恢复已删除的 C:\Program Files\Sublime Text 3\Packages\Python.sublime-package?