小编jez*_*ael的帖子

在pandas中一起使用loc和iloc

说我有以下的数据帧,我想改变列的两个元素c是对应于列前两个元素a是等于1平等2.

>>> df = pd.DataFrame({"a" : [1,1,1,1,2,2,2,2], "b" : [2,3,1,4,5,6,7,2], "c" : [1,2,3,4,5,6,7,8]})
>>> df.loc[df["a"] == 1, "c"].iloc[0:2] = 2
>>> df
   a  b  c
0  1  2  1
1  1  3  2
2  1  1  3
3  1  4  4
4  2  5  5
5  2  6  6
6  2  7  7
7  2  2  8
Run Code Online (Sandbox Code Playgroud)

第二行中的代码不起作用,因为iloc设置了副本,因此不修改原始数据帧.我该怎么做?

python indexing dataframe pandas

9
推荐指数
2
解决办法
4373
查看次数

自Epoch以来如何将熊猫时间戳转换为纳米?

从Epoch开始,将Pandas Timestamp转换为nano的最有效方法是什么?

import pandas as pd
ns = 1470924597871000000   
timestamp = pd.to_datetime(ns, unit="ns")
Run Code Online (Sandbox Code Playgroud)

然后怎么样

timestamp => 1470924597871000000  ns???
Run Code Online (Sandbox Code Playgroud)

datetime epoch python-3.x pandas

9
推荐指数
1
解决办法
2221
查看次数

如何在熊猫中考虑NaN生成序列

我有一个包含NaN和True作为值的系列.我想要另一个系列来生成一个数字序列,这样每当NaN将该系列值设置为0并且在两个NaN行之间我需要执行cumcount.

输入:

colA
NaN
True
True
True
True
NaN
True
NaN
NaN
True
True
True
True
True
Run Code Online (Sandbox Code Playgroud)

产量

ColA    Sequence
NaN     0
True    0
True    1
True    2
True    3
NaN     0
True    0
NaN     0
NaN     0
True    0
True    1
True    2
True    3
True    4
Run Code Online (Sandbox Code Playgroud)

如何在熊猫中执行此操作?

python boolean nan pandas cumsum

9
推荐指数
2
解决办法
921
查看次数

转到定义失败 - Visual Studio 2008

我在Visual Studio 2008中编写了一个C++应用程序.它在几个头文件中有很多已定义的结构,例如:

#pragma pack( push , 1 )                // align on a 1-byte boundary

typedef struct myStruct_tag
{
    /* ... */
} myStruct_t;

#pragma pack( pop )                     // end 1-byte boundary alignment
Run Code Online (Sandbox Code Playgroud)

在源文件中,这些定义的结构如下使用:

void MyFunc( void )
{
    myStruct_t * myStruct = NULL;

    myStruct = (myStruct_t *)malloc( sizeof(myStruct_t) );

    /* and so forth and so on... */
}
Run Code Online (Sandbox Code Playgroud)

即使它成功编译0错误和0警告,有时当我右键单击自定义数据类型(如in MyFunc)时,它给我一个错误:

未定义符号'myStruct_t'.

然后单击"确定"关闭对话框并按Ctrl+ Alt+ F7重建解决方案.它构建时没有任何错误或警告,因此我知道它正在找到myStruct_t编译时的定义,但是当我尝试使用Go to Definition功能时它无法找到它.我唯一想到的是这个应用程序有很多定义的结构,单字节对齐,但这不应该有所作为.有人知道如何解决这个问题吗?

c++ visual-studio-2008

8
推荐指数
1
解决办法
5465
查看次数

如何并行合并两个pandas数据帧(多线程或多处理)

如果不进行并行编程,我可以key使用下面的代码在列上合并左侧和右侧数据帧,但由于两者都非常大,因此速度太慢.有没有什么方法可以有效并行化?

我有64个内核,所以实际上我可以使用其中的63个来合并这两个数据帧.

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                      'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})


right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})


result = pd.merge(left, right, on='key')
Run Code Online (Sandbox Code Playgroud)

输出将是:

left:
    A   B key
0  A0  B0  K0
1  A1  B1  K1
2  A2  B2  K2
3  A3  B3  K3

right:
    C   D key
0  C0  D0  K0
1  C1  D1  K1
2  C2  D2  K2 …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multithreading multiprocessing pandas

8
推荐指数
2
解决办法
4455
查看次数

Python pandas:使用方法链接将列添加到分组的DataFrame

首先让我说我是熊猫新手.

我想在DataFrame中创建一个新列.我可以这样做,如我的例子所示.但我想通过链接方法来做到这一点,所以我不必分配新的变量.让我首先展示我想要实现的目标,以及到目前为止我做了什么:

In [1]:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd

In [2]:
np.random.seed(10)
df=pd.DataFrame(np.random.randint(1,5,size=(10, 3)), columns=list('ABC'))
df

Out [2]:
A  B  C
2  2  1
4  1  2
4  1  2
2  1  2
2  3  1
2  1  3
1  3  1
4  1  1
4  4  3
1  4  3
In [3]:
filtered_DF = df[df['B']<2].copy()
grouped_DF = filtered_DF.groupby('A')
filtered_DF['C_Share_By_Group'] =filtered_DF.C.div(grouped_DF.C.transform("sum"))
filtered_DF

Out [3]:
A  B  C  C_Share_By_Group
4  1  2               0.4
4 …
Run Code Online (Sandbox Code Playgroud)

python dataframe python-2.7 pandas

8
推荐指数
1
解决办法
1087
查看次数

将函数应用于pandas Python中的每一行时出现数据转换错误

我在python中的pandas中有一个数据框,类似于这样的东西 -

    contest_login_count  contest_participation_count  ipn_ratio
0                    1                            1   0.000000
1                    3                            3   0.083333
2                    3                            3   0.000000
3                    3                            3   0.066667
4                    5                           13   0.102804
5                    2                            3   0.407407
6                    1                            3   0.000000
7                    1                            2   0.000000
8                   53                           91   0.264151
9                    1                            2   0.000000
Run Code Online (Sandbox Code Playgroud)

现在我想将一个函数应用于此数据帧的每一行该函数被写为 -

def findCluster(clusterModel,data):
    return clusterModel.predict(data)
Run Code Online (Sandbox Code Playgroud)

我以这种方式将此函数应用于每一行 -

df_fil.apply(lambda x : findCluster(cluster_all,x.reshape(1,-1)),axis=1)
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到一条警告 -

DataConversionWarning:带有输入dtype对象的数据已转换为float64.

warnings.warn(msg,DataConversionWarning)

每行打印一次此警告.因为,我的数据框中有大约450K行,我的计算机挂起,同时在ipython笔记本上打印所有这些警告消息.

但是为了测试我的功能,我创建了一个虚拟数据帧并尝试在其上应用相同的功能,并且它运行良好.这是代码 -

t = pd.DataFrame([[10.35,100.93,0.15],[10.35,100.93,0.15]])
t.apply(lambda x:findCluster(cluster_all,x.reshape(1,-1)),axis=1)
Run Code Online (Sandbox Code Playgroud)

这个输出是 -

   0  1  2
0  4  4  4
1  4 …
Run Code Online (Sandbox Code Playgroud)

python function apply dataframe pandas

8
推荐指数
1
解决办法
2万
查看次数

使用python从时间戳中提取小时

我有一个数据帧df_energy2

df_energy2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 29974 entries, 0 to 29973
Data columns (total 4 columns):
TIMESTAMP        29974 non-null datetime64[ns]
P_ACT_KW         29974 non-null int64
PERIODE_TARIF    29974 non-null object
P_SOUSCR         29974 non-null int64
dtypes: datetime64[ns](1), int64(2), object(1)
memory usage: 936.8+ KB
Run Code Online (Sandbox Code Playgroud)

这种结构:

df_energy2.head()

TIMESTAMP P_ACT_KW PERIODE_TARIF P_SOUSCR
2016-01-01 00:00:00 116 HC 250 
2016-01-01 00:10:00 121 HC 250
Run Code Online (Sandbox Code Playgroud)

有没有可以提取小时的python功能TIMESTAMP

亲切的问候

python datetime extract hour pandas

8
推荐指数
1
解决办法
2万
查看次数

从python pandas describe中压缩名称dtype

可以说我有

r = pd.DataFrame({'A':1 ,
              'B':pd.Series(1,index=list(range(4)),dtype='float32')})
Run Code Online (Sandbox Code Playgroud)

r['B'].describe()[['mean','std','min','max']]给出一个输出:

mean    1.0
std     0.0
min     1.0
max     1.0
Name: B, dtype: float64
Run Code Online (Sandbox Code Playgroud)

但是从上面的输出中,我应该如何摆脱或压制最后一行 " Name:B, dtype: float64"

我想出了实现这一目标的一种方法

x=r['B'].describe()[['mean','std','min','max']]
print "mean ",x['mean'],"\nstd ",x['std'],"\nmin ",x['min'],"\nmax ",x['max']  
Run Code Online (Sandbox Code Playgroud)

它给出了所需的输出:

mean  1.0 
std  0.0 
min  1.0 
max  1.0 
Run Code Online (Sandbox Code Playgroud)

是否有任何清洁工可以直接从pd.describe()实现此输出

python format series dataframe pandas

8
推荐指数
2
解决办法
5628
查看次数

熊猫groupby和过滤器

我有数据帧:

df = pd.DataFrame({'ID':[1,1,2,2,3,3], 
                   'YEAR' : [2011,2012,2012,2013,2013,2014], 
                   'V': [0,1,1,0,1,0],
                   'C':[00,11,22,33,44,55]})
Run Code Online (Sandbox Code Playgroud)

我想按ID分组,并在每个组中选择V = 0的行.

这似乎不起作用:

print(df.groupby(['ID']).filter(lambda x: x['V'] == 0)) 
Run Code Online (Sandbox Code Playgroud)

出了错误:

TypeError:filter函数返回一个Series,但是期望一个标量bool

如何使用过滤器来实现目标?谢谢.

编辑:V上的条件可能因组而异,例如,对于ID 1,V == 0,对于ID 2,V == 1,此信息可通过另一个DF获得:

df = pd.DataFrame({'ID':[1,2,3], 
                   'V': [0,1,0])
Run Code Online (Sandbox Code Playgroud)

那么如何在每个组内进行行过滤?

python indexing group-by conditional-statements pandas

8
推荐指数
1
解决办法
9145
查看次数