美好的一天,
我有一个像这样的列的数据框,让我们假设有1000个,但这是一个示例:
A B C
12 1 2
24 2 4
36 3 6
48 4 8
我希望将数字分成两个单独的数字。我希望输出看起来像这样:
Phone Number
如何使用Pandas和Numpy实现这一目标?真的很感激帮助。 提前谢谢!
答案 0 :(得分:3)
使用floor
和mod
:
df['B'] = df['A'] // 10
df['C'] = df['A'] % 10
print (df)
A B C
0 12 1 2
1 24 2 4
2 36 3 6
3 48 4 8
如果输入数据是字符串,则可以按位置按[]
索引:
print (df['A'].apply(type))
0 <class 'str'>
1 <class 'str'>
2 <class 'str'>
3 <class 'str'>
Name: A, dtype: object
df['B'] = df['A'].str[0]
df['C'] = df['A'].str[1]
#if necessary convert all columns to integers
df = df.astype(int)
print (df)
A B C
0 12 1 2
1 24 2 4
2 36 3 6
3 48 4 8
答案 1 :(得分:3)
In[141]:
df['B'] = df['A'].floordiv(10)
df['C'] = df['A'].mod(10)
df
Out[141]:
A B C
0 12 1 2
1 24 2 4
2 36 3 6
3 48 4 8
还有numpy
个,np.floor_divide
和np.mod
:
In[142]:
df['B'] = np.floor_divide(df['A'],10)
df['C'] = np.mod(df['A'],10)
df
Out[142]:
A B C
0 12 1 2
1 24 2 4
2 36 3 6
3 48 4 8
numpy版本更快:
%%timeit
df['B'] = df['A'].floordiv(10)
df['C']= df['A'].mod(10)
1000 loops, best of 3: 733 µs per loop
%%timeit
df['B'] = np.floor_divide(df['A'],10)
df['C'] = np.mod(df['A'],10)
1000 loops, best of 3: 491 µs per loop
答案 2 :(得分:2)
In [15]: df.A.astype(str).str.extractall(r'(.)')[0].unstack().astype(np.int8)
Out[15]:
match 0 1
0 1 2
1 2 4
2 3 6
3 4 8
答案 3 :(得分:2)
另一种基于分割被视为字符串的数字的每个字符的方法:
df = pd.DataFrame([12, 24, 36, 48], columns=['A'])
values = df['A'].values
split = [list(str(el)) for el in values]
out = pd.DataFrame(split, columns=['B', 'C']).astype(int)
给出:
out
B C
0 1 2
1 2 4
2 3 6
3 4 8