假设我有一个数据帧df,我想创建一个填充0的新列,我使用:
df['new_col'] = 0
Run Code Online (Sandbox Code Playgroud)
这个,没问题.但是,如果我想使用的值是一个列表,它不起作用:
df['new_col'] = my_list
ValueError: Length of values does not match length of index
Run Code Online (Sandbox Code Playgroud)
我理解为什么这不起作用(pandas试图为列的每个单元格分配一个列表值),但是我们怎样才能避免这种行为呢?(如果不清楚我希望我的新列的每个单元格都包含相同的预定义列表)
注意:我也试过:df.assign(new_col = my_list),同样的问题
我有一个数据集,我正在尝试应用一些算术方法.问题是它给了我相对较大的数字,当我用numpy做它时,它们的库存为0.
奇怪的是,当我计算数字appart时,它们有一个int值,当我使用numpy计算它们时它们只变为零.
x = np.array([18,30,31,31,15])
10*150**x[0]/x[0]
Out[1]:36298069767006890
vector = 10*150**x/x
vector
Out[2]: array([0, 0, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)
我当然检查了他们的类型:
type(10*150**x[0]/x[0]) == type(vector[0])
Out[3]:True
Run Code Online (Sandbox Code Playgroud)
如何使用numpy计算这个大数字而不将它们变成零?
请注意,如果我们在开始时删除因子10,那么问题就会发生变化(但我认为这可能是一个类似的原因):
x = np.array([18,30,31,31,15])
150**x[0]/x[0]
Out[4]:311075541538526549
vector = 150**x/x
vector
Out[5]: array([-329406144173384851, -230584300921369396, 224960293581823801,
-224960293581823801, -368934881474191033])
Run Code Online (Sandbox Code Playgroud)
负数表示python中的int64类型的最大数字是否已经交叉不是吗?
我有一个如下数据框:
df = pd.DataFrame([[1,2],[10,20],[10,2],[1,40]],columns = ['a','b'])
a b
0 1 2
1 10 20
2 10 2
3 1 40
Run Code Online (Sandbox Code Playgroud)
我想选择b列在哪里a == 1,以下是经典选择:
df[df.a == 1].b
a b
0 1 2
3 1 40
Run Code Online (Sandbox Code Playgroud)
然后我想选择这个子数据帧的第i行,这不是索引为i的行.还有几种方法,如下所示:
df[df.a == 1].b.iloc[[1]]
Output:
3 40
Name: b, dtype: int64
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.问题是当我尝试修改我到达那里的值时,实际上这个选择方法会产生数据帧切片的副本,而不是对象本身.因此我无法在原地进行修改.
test[test.a == 1].b.iloc[[1]] = 3
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
Run Code Online (Sandbox Code Playgroud)
我不知道"复制"问题在哪个部分,因为以下两个产生同样的问题:
test.iloc[[3]].b = 3
test[test.a == 1].b = …Run Code Online (Sandbox Code Playgroud) 我有一个pandas数据帧,其中包含时间戳和全球位置的雷击记录,格式如下:
Index Date Time Lat Lon Good fix?
0 1 20160101 00:00:00.9962692 -7.1961 -60.7604 1
1 2 20160101 00:00:01.0646207 -7.0518 -60.6911 1
2 3 20160101 00:00:01.1102066 -25.3913 -57.2922 1
3 4 20160101 00:00:01.2018573 -7.4842 -60.5129 1
4 5 20160101 00:00:01.2942750 -7.3939 -60.4992 1
5 6 20160101 00:00:01.4431493 -9.6386 -62.8448 1
6 8 20160101 00:00:01.5226157 -23.7089 -58.8888 1
7 9 20160101 00:00:01.5932412 -6.3513 -55.6545 1
8 10 20160101 00:00:01.6736350 -23.8019 -58.9382 1
9 11 20160101 00:00:01.6957858 -24.5724 -57.7229 1
Run Code Online (Sandbox Code Playgroud)
实际数据框包含数百万行.我希望将在空间和时间上发生的事件与其他事件分开,并将它们存储在新的数据框中isolated_fixes …
在 a 之后groupby,使用时agg,如果columns:functions传递了一个 dict ,则函数将应用到相应的列中。然而,这种语法不适用于transform. 还有另一种方法可以在 中应用多个函数transform吗?
让我们举一个例子:
import pandas as pd
df_test = pd.DataFrame([[1,2,3],[1,20,30],[2,30,50],[1,2,33],[2,4,50]],columns = ['a','b','c'])
Out[1]:
a b c
0 1 2 3
1 1 20 30
2 2 30 50
3 1 2 33
4 2 4 50
def my_fct1(series):
return series.mean()
def my_fct2(series):
return series.std()
df_test.groupby('a').agg({'b':my_fct1,'c':my_fct2})
Out[2]:
c b
a
1 16.522712 8
2 0.000000 17
Run Code Online (Sandbox Code Playgroud)
前面的例子展示了如何将不同的函数应用于 中的不同列agg,但是如果我们想转换列而不聚合它们,agg就不能再使用了。所以:
df_test.groupby('a').transform({'b':np.cumsum,'c':np.cumprod})
Out[3]:
TypeError: unhashable …Run Code Online (Sandbox Code Playgroud)