我正在hdf = pandas.HDFStore('Survey.h5')通过pandas包处理从h5文件加载的调查数据.在此范围内DataFrame,所有行都是单个调查的结果,而列是单个调查中所有问题的答案.
我的目标是将此数据集缩小到一个较小的数据集,DataFrame仅包括某个问题上具有特定描述答案的行,即此列中的所有相同值.我能够确定具有此条件的所有行的索引值,但我找不到如何删除此行或仅使用这些行创建新的df.
我必须阅读一些Excel格式的文件和一些CSV格式的文件.有些文件有数百列.
有没有办法选择多个列范围而不指定所有列名称或位置?例如,选择列1-10,15,17和50-100:
df = df.ix[1:10, 15, 17, 50:100]
Run Code Online (Sandbox Code Playgroud)
我需要知道在从Excel文件和CSV文件创建数据框时以及在创建数据框架后如何执行此操作.
我有一个与csv文件和解析日期时间相关的简单问题.
我有一个看起来像这样的csv文件:
YYYYMMDD, HH, X
20110101, 1, 10
20110101, 2, 20
20110101, 3, 30
Run Code Online (Sandbox Code Playgroud)
我想用pandas(read_csv)阅读它并将它放在由datetime索引的数据帧中.到目前为止,我已尝试实现以下内容:
import pandas as pnd
pnd.read_csv("..\\file.csv", parse_dates = True, index_col = [0,1])
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
X
YYYYMMDD HH
2011-01-01 2012-07-01 10
2012-07-02 20
2012-07-03 30
Run Code Online (Sandbox Code Playgroud)
正如您在将HH转换为不同日期时看到的parse_dates.
是否有一种简单有效的方法可以将"YYYYMMDD"列与"HH"列正确组合以获得类似的效果?:
X
Datetime
2011-01-01 01:00:00 10
2011-01-01 02:00:00 20
2011-01-01 03:00:00 30
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
在比较两个系列时,我遇到了大熊猫的意外行为.我想知道这是故意还是错误.
假设我:
import pandas as pd
x = pd.Series([1, 1, 1, 0, 0, 0], index=['a', 'b', 'c', 'd', 'e', 'f'], name='Value')
y = pd.Series([0, 2, 0, 2, 0, 2], index=['c', 'f', 'a', 'e', 'b', 'd'], name='Value')
x > y
Run Code Online (Sandbox Code Playgroud)
收益率:
a True
b False
c True
d False
e False
f False
Name: Value, dtype: bool
Run Code Online (Sandbox Code Playgroud)
这不是我想要的.很明显,我预计索引会排成一行.但我必须明确排列它们才能获得理想的结果.
x > y.reindex_like(x)
Run Code Online (Sandbox Code Playgroud)
收益率:
a True
b True
c True
d False
e False
f False
Name: Value, dtype: bool
Run Code Online (Sandbox Code Playgroud)
这是我的预期.
更糟糕的是,如果我:
x …Run Code Online (Sandbox Code Playgroud) 我有一个列Date_Time,我希望按日期时间分组而不创建新列.这可能是我当前的代码不起作用.
df = pd.groupby(df,by=[df['Date_Time'].date()])
Run Code Online (Sandbox Code Playgroud) 关于可怕的问题,有无数的问题 SettingWithCopyWarning
我已经很好地理解了它是如何产生的.(注意我说好,不好)
当数据df帧通过存储的属性"附加"到另一个数据帧时,就会发生这种情况is_copy.
这是一个例子
df = pd.DataFrame([[1]])
d1 = df[:]
d1.is_copy
<weakref at 0x1115a4188; to 'DataFrame' at 0x1119bb0f0>
Run Code Online (Sandbox Code Playgroud)
我们可以将该属性设置为None或
d1 = d1.copy()
Run Code Online (Sandbox Code Playgroud)
我见过像@Jeff这样的开发者,我不记得还有谁,警告这样做.引用SettingWithCopyWarning有目的.
问题
好的,那么什么是一个具体的例子,说明为什么通过分配copy回原始来忽略警告是一个坏主意.
我会定义"坏主意"以澄清.
坏主意
这是一个坏主意来放置代码投入生产,这将导致越来越在星期六晚上说你的代码被打破,需要固定的中间一个电话.
现在如何使用df = df.copy()以绕过SettingWithCopyWarning导致获得那种电话.我想要它拼写出来,因为这是一个混乱的来源,我试图找到清晰度.我想看到爆炸的边缘情况!
我有一个DataFrame包含多个列的pandas :
Index: 239897 entries, 2012-05-11 15:20:00 to 2012-06-02 23:44:51
Data columns:
foo 11516 non-null values
bar 228381 non-null values
Time_UTC 239897 non-null values
dtstamp 239897 non-null values
dtypes: float64(4), object(1)
Run Code Online (Sandbox Code Playgroud)
where foo和bar是包含相同数据的列,但命名方式不同.是否有移动从而弥补了行的方式foo进入bar,最好同时保持的名字bar?
最后,DataFrame应显示为:
Index: 239897 entries, 2012-05-11 15:20:00 to 2012-06-02 23:44:51
Data columns:
bar 239897 non-null values
Time_UTC 239897 non-null values
dtstamp 239897 non-null values
dtypes: float64(4), object(1)
Run Code Online (Sandbox Code Playgroud)
这就是组成bar的NaN值被来自的值替换foo.
我不确定为什么我的简单OLS会得到略微不同的结果,这取决于我是否通过panda的实验性rpy接口进行回归,R或者我是否在Python中使用statsmodel.
import pandas
from rpy2.robjects import r
from functools import partial
loadcsv = partial(pandas.DataFrame.from_csv,
index_col="seqn", parse_dates=False)
demoq = loadcsv("csv/DEMO.csv")
rxq = loadcsv("csv/quest/RXQ_RX.csv")
num_rx = {}
for seqn, num in rxq.rxd295.iteritems():
try:
val = int(num)
except ValueError:
val = 0
num_rx[seqn] = val
series = pandas.Series(num_rx, name="num_rx")
demoq = demoq.join(series)
import pandas.rpy.common as com
df = com.convert_to_r_dataframe(demoq)
r.assign("demoq", df)
r('lmout <- lm(demoq$num_rx ~ demoq$ridageyr)') # run the regression
r('print(summary(lmout))') # print from R
Run Code Online (Sandbox Code Playgroud)
从中R …
什么是获得正方形对角线的有效方法DataFrame.我希望结果是一个Series有MultiIndex两个级别的,第一个是DataFrame第二个级别的索引是DataFrame.
import pandas as pd
import numpy as np
np.random.seed([3, 1415])
df = pd.DataFrame(np.random.rand(3, 3) * 5,
columns = list('abc'),
index = list('ABC'),
dtype=np.int64
)
Run Code Online (Sandbox Code Playgroud)
我想看到这个:
print df.stack().loc[[('A', 'a'), ('B', 'b'), ('C', 'c')]]
A a 2
B b 2
C c 3
Run Code Online (Sandbox Code Playgroud) 我在这里和那里回答几个问题.我经常测试我和其他人的解决方案有多快.
是否有一个简单的框架来全面了解各种解决方案的速度有多快?
考虑数据帧 df
df = pd.DataFrame({
'Group': list('QLCKPXNLNTIXAWYMWACA'),
'Value': [29, 52, 71, 51, 45, 76, 68, 60, 92, 95,
99, 27, 77, 54, 39, 23, 84, 37, 99, 87]
})
Run Code Online (Sandbox Code Playgroud)
我想总结Value按不同值分组的列Group.我有三种方法可以做到这一点.
import pandas as pd
import numpy as np
from numba import njit
def sum_pd(df):
return df.groupby('Group').Value.sum()
def sum_fc(df):
f, u = pd.factorize(df.Group.values)
v = df.Value.values
return pd.Series(np.bincount(f, weights=v).astype(int), pd.Index(u, name='Group'), name='Value').sort_index()
@njit
def wbcnt(b, w, k):
bins = np.arange(k)
bins = …Run Code Online (Sandbox Code Playgroud)