msa*_*m85 6 python numpy pandas
如何通过使用pandas或numpy将一列6个整数数字分成6列,每列一个数字?
import pandas as pd
import numpy as np
df = pd.Series(range(123456,123465))
df = pd.DataFrame(df)
df.head()
Run Code Online (Sandbox Code Playgroud)
Number
654321
223344
Run Code Online (Sandbox Code Playgroud)
Number | x1 | x2 | x3 | x4 | x5 | x6 |
654321 | 6 | 5 | 4 | 3 | 2 | 1 |
223344 | 2 | 2 | 3 | 3 | 4 | 4 |
Run Code Online (Sandbox Code Playgroud)
这是一个简单的建议:
import pandas as pd
# MCVE dataframe:
df = pd.DataFrame([123456, 456789, 135797, 123, 123456789], columns=['number'])
def digit(x, n):
"""Return the n-th digit of integer in base 10"""
return (x // 10**n) % 10
def digitize(df, key, n):
"""Extract n less significant digits from an integer in base 10"""
for i in range(n):
df['x%d' % i] = digit(df[key], n-i-1)
# Apply function on dataframe (inplace):
digitize(df, 'number', 6)
Run Code Online (Sandbox Code Playgroud)
对于试验数据框,它返回:
number x0 x1 x2 x3 x4 x5
0 123456 1 2 3 4 5 6
1 456789 4 5 6 7 8 9
2 135797 1 3 5 7 9 7
3 123 0 0 0 1 2 3
4 123456789 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
这种方法避免了需要投进去string,然后再转换为int。
它依赖于模块化整数算术,其操作细节如下:
10**3 # int: 1000 (integer power)
54321 // 10**3 # int: 54 (quotient of integer division)
(54321 // 10**3) % 10 # int: 4 (remainder of integer division, modulo)
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的一点是,它对于小于n或大于数字的数字是安全且准确的(请注意,n在后一种情况下,它将返回较低的有效数字)。
| 归档时间: |
|
| 查看次数: |
555 次 |
| 最近记录: |