小编yem*_*emu的帖子

如何获取Pandas数据帧的行数?

我正在尝试用Pandas获取dataframe df的行数,这是我的代码.

方法1:

total_rows = df.count
print total_rows +1
Run Code Online (Sandbox Code Playgroud)

方法2:

total_rows = df['First_columnn_label'].count
print total_rows +1
Run Code Online (Sandbox Code Playgroud)

两个代码片段都给我这个错误:

TypeError:+:'instancemethod'和'int'的不支持的操作数类型

我究竟做错了什么?

python dataframe pandas

786
推荐指数
12
解决办法
154万
查看次数

将具有常量值的列添加到pandas数据帧

我不知道为什么这会让NaN进入"新"栏目?

np.random.seed(0)
df = pd.DataFrame(np.random.randn(3, 3), columns=list('ABC'), index=[1, 2, 3])
df

          A         B         C
1  1.764052  0.400157  0.978738
2  2.240893  1.867558 -0.977278
3  0.950088 -0.151357 -0.103219
Run Code Online (Sandbox Code Playgroud)

python pandas

74
推荐指数
4
解决办法
8万
查看次数

如何在pandas中读取空格分隔值的文件

我尝试将文件读入熊猫.该文件的值由空格分隔,但我尝试的空格数不同:

pd.read_csv('file.csv', delimiter=' ')
Run Code Online (Sandbox Code Playgroud)

但它不起作用

python pandas delimiter-separated-values

57
推荐指数
2
解决办法
6万
查看次数

熊猫多处理适用

我正在尝试将多处理与pandas数据帧一起使用,即将数据帧拆分为8个部分.使用apply(每个部分在不同的过程中处理)对每个部分应用一些功能.

编辑:这是我最终找到的解决方案:

import multiprocessing as mp
import pandas.util.testing as pdt

def process_apply(x):
    # do some stuff to data here

def process(df):
    res = df.apply(process_apply, axis=1)
    return res

if __name__ == '__main__':
    p = mp.Pool(processes=8)
    split_dfs = np.array_split(big_df,8)
    pool_results = p.map(aoi_proc, split_dfs)
    p.close()
    p.join()

    # merging parts processed by different processes
    parts = pd.concat(pool_results, axis=0)

    # merging newly calculated parts to big_df
    big_df = pd.concat([big_df, parts], axis=1)

    # checking if the dfs were merged correctly
    pdt.assert_series_equal(parts['id'], big_df['id'])
Run Code Online (Sandbox Code Playgroud)

python multiprocessing pandas

24
推荐指数
5
解决办法
2万
查看次数

pandas将函数应用于多列和多行

我有一个数据帧,在行和列'xpos','ypos'中有连续的像素坐标,我想计算连续像素之间每条路径的角度.目前我有下面提供的解决方案,它工作正常,我的文件的大小足够快,但迭代所有行似乎不是熊猫的方式来做到这一点.我知道如何将函数应用于不同的列,以及如何将函数应用于不同的列行,但无法弄清楚如何将两者结合起来.

这是我的代码:

fix_df = pd.read_csv('fixations_out.csv')

# wyliczanie k?ta sakady
temp_list=[]
for count, row in df.iterrows():
    x1 = row['xpos']
    y1 = row['ypos']
    try:
        x2 = df['xpos'].ix[count-1]
        y2 = df['ypos'].ix[count-1]
        a = abs(180/math.pi * math.atan((y2-y1)/(x2-x1)))
        temp_list.append(a)
    except KeyError:
        temp_list.append(np.nan)
Run Code Online (Sandbox Code Playgroud)

然后我将临时列表插入到df中

编辑:实施我的评论提示后:

df['diff_x'] = df['xpos'].shift() - df['xpos']
df['diff_y'] = df['ypos'].shift() - df['ypos']

def calc_angle(x):
    try:
        a = abs(180/math.pi * math.atan((x.diff_y)/(x.diff_x)))
        return a
    except ZeroDivisionError:
        return 0

df['angle_degrees'] = df.apply(calc_angle, axis=1)
Run Code Online (Sandbox Code Playgroud)

我比较了我的df的三个解决方案的时间(df的大小约为6k行),迭代几乎比应用慢9倍,比没有应用时慢了大约1500倍:

迭代的解决方案的执行时间,包括将新列插回到df:1,51s

没有迭代的解决方案的执行时间,应用:0.17s

EdChum使用diff()接受答案的执行时间,没有迭代且没有应用:0.001s

建议:不要使用迭代或应用,并始终尝试使用矢量化计算;)它不仅更快,而且更具可读性.

python pandas

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