python pandas wildcard?用常量替换df中的所有值

时间:2015-02-27 06:42:38

标签: python pandas wildcard

我有一个df,想要制作一个大小相同的new_df,但所有1都是new_df=df.replace("*","1")。符合精神:1。我认为这比从头创建一个新的df要快,因为我需要获取维度,用{{1}}填充它,然后复制所有标题。除非我对此错了。

2 个答案:

答案 0 :(得分:2)

df_new = pd.DataFrame(np.ones(df.shape),columns = df.columns)

import numpy as np
import pandas as pd

d = [
    [1,1,1,1,1],
    [2,2,2,2,2],
    [3,3,3,3,3],
    [4,4,4,4,4],
    [5,5,5,5,5],
]

cols = ["A","B","C","D","E"]

%timeit df1 = pd.DataFrame(np.ones(df.shape), columns=df.columns)
10000 loops, best of 3: 94.6 µs per loop

%timeit df2 = df.copy(); df2.loc[:, :] = 1
1000 loops, best of 3: 245 µs per loop

%timeit df3 = df * 0 + 1
1000 loops, best of 3: 200 µs per loop

答案 1 :(得分:1)

实际上很容易。

import pandas as pd

d = [
    [1,1,1,1,1],
    [2,2,2,2,2],
    [3,3,3,3,3],
    [4,4,4,4,4],
    [5,5,5,5,5],
]

cols = ["A","B","C","D","E"]

df = pd.DataFrame(d, columns=cols)
print df

print "------------------------"

df.loc[:,:] = 1
print df

结果:

   A  B  C  D  E
0  1  1  1  1  1
1  2  2  2  2  2
2  3  3  3  3  3
3  4  4  4  4  4
4  5  5  5  5  5
------------------------
   A  B  C  D  E
0  1  1  1  1  1
1  1  1  1  1  1
2  1  1  1  1  1
3  1  1  1  1  1
4  1  1  1  1  1

显然,df.loc[:,:]表示您定位所有列的所有行。如果你想要一个新的数据帧,只需使用df2 = df.copy()或其他东西。