大熊猫面具号码

时间:2016-09-20 10:26:15

标签: python pandas

我有一个输入到数据帧的coloumns为12345,并希望输出到excel表作为1XXX5如何做到这一点。 dataframe coloumn中的数据类型是整数

df=pd.read_excel('INVAMF.xls',sheetname=4,header=0,skiprows=0)
#df created 

print df.dtypes
print np.count_nonzero(pd.value_counts(df['ACCOUNT_NUMBER'].values))

s = (df['ACCOUNT_NUMBER'])

print s
s = s.astype(str)

s.apply(lambda x: x[0] + 'X' * (len(x) - 2) + x[-1])

print s

0        32642
1        32643
2        32644
3        32677
4        32680
5        32680
6        32688
7        32688
8        32695
9        32708
10       32708
11       32709
12       32710
13       32734
14       32734
15       32738
16       32738
17        6109
18        6109
  1. List item

1 个答案:

答案 0 :(得分:1)

由于您未能在此处发布任何数据和代码,因此假设数字的长度不同,这是一种通用形式:

In [141]:
s = pd.Series([8815392,2983])
s = s.astype(str)
s.apply(lambda x: x[0] + 'X' * (len(x) - 2) + x[-1])

Out[141]:
0    8XXXXX2
1       2XX3
dtype: object

如果数字长度相等,您可以使用矢量化方法设置整个列:

In [142]:
s = pd.Series([8815392,1291283])
s = s.astype(str)
s.str[0] + 'X' * (s.str.len() - 2)[0] + s.str[-1]

Out[142]:
0    8XXXXX2
1    1XXXXX3
dtype: object

另外,为了澄清一个常见问题,您需要将操作分配回去,因为大多数pandas方法都会返回副本并且不能正常工作,尽管某些方法确实有inplace arg。所以你需要做以下事情:

s = s.apply(lambda x: x[0] + 'X' * (len(x) - 2) + x[-1])