我有一个输入到数据帧的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
List item
答案 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])