我有一个包含4列的pandas DataFrame,我想创建一个只有三列的新 DataFrame .这个问题类似于:从数据框中提取特定列,但是对于不是R的pandas.以下代码不起作用,引发错误,并且当然不是这种方式的pandasnic方法.
import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator
Run Code Online (Sandbox Code Playgroud)
什么是pandasnic方式呢?
在pandas DataFrame中考虑(非数字)nan值的最佳方法是什么?
以下代码:
import numpy as np
import pandas as pd
dfd = pd.DataFrame([1, np.nan, 3, 3, 3, np.nan], columns=['a'])
dfv = dfd.a.value_counts().sort_index()
print("nan: %d" % dfv[np.nan].sum())
print("1: %d" % dfv[1].sum())
print("3: %d" % dfv[3].sum())
print("total: %d" % dfv[:].sum())
Run Code Online (Sandbox Code Playgroud)
输出:
nan: 0
1: 1
3: 3
total: 4
Run Code Online (Sandbox Code Playgroud)
期望的输出是:
nan: 2
1: 1
3: 3
total: 6
Run Code Online (Sandbox Code Playgroud)
我使用pandas 0.17和Python 3.5.0与Anaconda 2.4.0.
鉴于python的禅,为什么zip(*)用于解压而不是一些名为unzip()的函数?例如Transpose/Unzip Function(zip的反转)?显示如何解压缩列表.
>>> zip(*[('a', 1), ('b', 2), ('c', 3), ('d', 4)])
[('a', 'b', 'c', 'd'), (1, 2, 3, 4)]
Run Code Online (Sandbox Code Playgroud)
怎么样:
然后
>>> unzip([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
Run Code Online (Sandbox Code Playgroud)
?
我在这里错过了什么?