我正在尝试选择数据帧子集的子集,仅选择一些列,并对行进行过滤.
df.loc[df.a.isin(['Apple', 'Pear', 'Mango']), ['a', 'b', 'f', 'g']]
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.
Run Code Online (Sandbox Code Playgroud)
现在切片和过滤的正确方法是什么?
假设我有一个像这样的多级字典
mydict = {
'first': {
'second': {
'third': {
'fourth': 'the end'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想像这样访问它
test = get_entry(mydict, 'first.second.third.fourth')
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的是什么
def get_entry(dict, keyspec):
keys = keyspec.split('.')
result = dict[keys[0]]
for key in keys[1:]:
result = dict[key]
return result
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?根据%timeit,函数的运行时间是1.26us,而访问字典的标准方式是这样的
foo = mydict['first']['second']['third']['fourth']
Run Code Online (Sandbox Code Playgroud)
需要541ns.如果可能的话,我正在寻找将其修剪到800ns范围的方法.
谢谢
我有如下所示的数据框.我需要获取B列的标量值,这取决于A的值(这是我脚本中的变量).我正在尝试loc()函数,但它返回一个Series而不是标量值.如何获得标量值()?
>>> x = pd.DataFrame({'A' : [0,1,2], 'B' : [4,5,6]})
>>> x
A B
0 0 4
1 1 5
2 2 6
>>> x.loc[x['A'] == 2]['B']
2 6
Name: B, dtype: int64
>>> type(x.loc[x['A'] == 2]['B'])
<class 'pandas.core.series.Series'>
Run Code Online (Sandbox Code Playgroud) 这是一组日期时间值:
array = np.array(['2016-05-01T00:00:59.3+10:00', '2016-05-01T00:02:59.4+10:00',
'2016-05-01T00:03:59.4+10:00', '2016-05-01T00:13:00.1+10:00',
'2016-05-01T00:22:00.5+10:00', '2016-05-01T00:31:01.1+10:00'],
dtype=object)
Run Code Online (Sandbox Code Playgroud)
pd.to_datetime 非常擅长推断日期时间格式.
array = pd.to_datetime(array)
print(array)
DatetimeIndex(['2016-04-30 14:00:59.300000', '2016-04-30 14:02:59.400000',
'2016-04-30 14:03:59.400000', '2016-04-30 14:13:00.100000',
'2016-04-30 14:22:00.500000', '2016-04-30 14:31:01.100000'],
dtype='datetime64[ns]', freq=None)
Run Code Online (Sandbox Code Playgroud)
如何动态确定pd.to_datetime推断出的日期时间格式?有点像:( %Y-%m-%dT...抱歉,我的约会时间非常糟糕).
我有一个带有字符串的列的csv文件,我想用pandas读取它.在此文件中,字符串null作为实际值出现,不应视为缺失值.
例:
import pandas as pd
from io import StringIO
data = u'strings,numbers\nfoo,1\nbar,2\nnull,3'
print(pd.read_csv(StringIO(data)))
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
strings numbers
0 foo 1
1 bar 2
2 NaN 3
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能将数值null(而不是NaN)纳入DataFrame?可以假定该文件不包含任何实际缺失的值.
是否有一种更短的方法来删除列MultiIndex级别(在我的情况下basic_amt),除了转换它两次?
In [704]: test
Out[704]:
basic_amt
Faculty NSW QLD VIC All
All 1 1 2 4
Full Time 0 1 0 1
Part Time 1 0 2 3
In [705]: test.reset_index(level=0, drop=True)
Out[705]:
basic_amt
Faculty NSW QLD VIC All
0 1 1 2 4
1 0 1 0 1
2 1 0 2 3
In [711]: test.transpose().reset_index(level=0, drop=True).transpose()
Out[711]:
Faculty NSW QLD VIC All
All 1 1 2 4
Full Time 0 1 0 1
Part Time 1 …Run Code Online (Sandbox Code Playgroud) 我知道这肯定已经回答了一些地方,但我找不到它.
问题:在groupby操作后对每个组进行采样.
import pandas as pd
df = pd.DataFrame({'a': [1,2,3,4,5,6,7],
'b': [1,1,1,0,0,0,0]})
grouped = df.groupby('b')
# now sample from each group, e.g., I want 30% of each group
Run Code Online (Sandbox Code Playgroud) 我有这个数据框:
Name Date Quantity
Apple 07/11/17 20
orange 07/14/17 20
Apple 07/14/17 70
Orange 07/25/17 40
Apple 07/20/17 30
Run Code Online (Sandbox Code Playgroud)
我想通过名称和日期汇总这个以获得数量总和详细信息:
日期:分组,结果应该在一周的开头(或者只是在星期一)
数量:总和,如果两个或多个记录具有相同的名称和日期(如果是相同的间隔)
所需的输出如下:
Name Date Quantity
Apple 07/10/17 90
orange 07/10/17 20
Apple 07/17/17 30
orange 07/24/17 40
Run Code Online (Sandbox Code Playgroud)
提前致谢
出于编程目的,我希望.iloc始终返回数据帧,即使结果数据帧只有一行.怎么做到这一点?
目前,.iloc当结果只有一行时返回一个Series.例:
In [1]: df = pd.DataFrame({'a':[1,2], 'b':[3,4]})
In [2]: df
Out[2]:
a b
0 1 3
1 2 4
In [3]: type(df.iloc[0, :])
Out[3]: pandas.core.series.Series
Run Code Online (Sandbox Code Playgroud)
由于两个原因,此行为很差:
.iloc可以返回一个系列或一个数据框,迫使我在我的代码中手动检查这一点- (错误的信息,如评论中所指出的).loc另一方面,总是返回一个数据框,使其pandas内部不一致
对于R用户,可以使用drop = FALSE或使用tidyverse的tibble 来完成,tidyverse的tibble默认情况下始终返回数据帧.
给定一个功能foo:
def foo(x):
pass
Run Code Online (Sandbox Code Playgroud)
通过调用str或repr给你一些像这样无聊的东西打印它的表示:
str(foo)
'<function foo at 0x119e0c8c8>'
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以覆盖函数的__str__方法来打印其他东西.基本上,我想做:
str(foo)
"I'm foo!'
Run Code Online (Sandbox Code Playgroud)
现在,我明白函数的描述应该来自__doc__函数的docstring.然而,这仅仅是一个实验.
在试图找出一个解决这个问题,我碰到来实现__str__的classes:如何定义一个类__str__方法?
这种方法涉及使用__str__方法定义元类,然后尝试__metaclass__在实际类中分配钩子.
我想知道是否可以对班级做同样的事情function,所以这就是我试过的 -
In [355]: foo.__class__
Out[355]: function
In [356]: class fancyfunction(type):
...: def __str__(self):
...: return self.__name__
...:
In [357]: foo.__class__.__metaclass__ = fancyfunction
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Run Code Online (Sandbox Code Playgroud)
我认为它不会起作用,但值得一试!
那么,实现__str__函数的最佳方法是什么?