大家好,我有以下DataFrame:
Index Numbering Description
1 A Agri. and Forest
2 1 Agri.
3 1.1 -----------
4 1.2 -----------
5 1.3 -----------
6 2 Forest
7 2.1 -----------
8 2.3 -----------
9 2.4 -----------
10 B Manufacturing
11 3 Autos
12 3.1 -----------
13 3.2 -----------
14 3.3 -----------
我想用从现有列中提取的值创建两个新列。我要实现以下目标:
Index Numbering Description Letter Number
1 A Agri. and Forest A
2 1 Agri. A 1
3 1.1 ----------- A 1
4 1.2 ----------- A 1
5 1.3 ----------- A 1
6 2 Forest A 2
7 2.1 ----------- A 2
8 2.3 ----------- A 2
9 2.4 ----------- A 2
10 B Manufacturing B
11 3 Autos B 3
12 3.1 ----------- B 3
13 3.2 ----------- B 3
14 3.3 ----------- B 3
非常感谢您的想法。
答案 0 :(得分:1)
我以这种方式解决了这个问题。(假设您可以在excel中以CSV格式存储数据)
import pandas as pd
import math
letter=''
data1 = pd.read_csv('C:/d1', sep=',', header=None,names=['C1','C2'])
df1=pd.DataFrame(data1)
dfNew=pd.DataFrame(columns=['C1','C2','C3','C4'])
(rows,columns)=df1.shape
for index in range(rows):
if(df1.iat[index,0].isalpha()):
letter=df1.iat[index,0]
number=''
else:
number=math.floor(float(df1.iat[index,0]))
tempRow=[df1.iat[index,0],df1.iat[index,1],letter,number]
dfNew.loc[len(dfNew)]=tempRow
print(dfNew)
C1 C2 C3 C4
0 A Agri. and Forest A
1 1 Agri. A 1
2 1.1 ----------- A 1
3 1.2 ----------- A 1
4 1.3 ----------- A 1
5 2 Forest A 2
6 2.1 ----------- A 2
7 2.3 ----------- A 2
8 2.4 ----------- A 2
9 B Manufacturing B
10 3 Autos B 3
11 3.1 ----------- B 3
12 3.2 ----------- B 3
13 3.3 ----------- B 3
我不确定为什么上一个不适用于您。但这可能会起作用。一探究竟。
import numpy as np
import pandas as pd
import math
letter=''
data1 = pd.read_csv('C:/random/d1', sep=',', header=None,names=['C1','C2'])
df1=pd.DataFrame(data1)
dfNew=pd.DataFrame(columns=['C1','C2','C3','C4'])
(rows,columns)=df1.shape
for index in range(rows):
try:
c1=float(df1.iat[index,0])
except:
c1=df1.iat[index,0]
if(isinstance(c1,float) ):
number=math.floor(c1)
else:
letter=df1.iat[index,0]
number=''
tempRow=[df1.iat[index,0],df1.iat[index,1],letter,number]
dfNew.loc[len(dfNew)]=tempRow
print()
print(dfNew)
C1 C2 C3 C4
0 A Agri. and Forest A
1 1 Agri. A 1
2 1.1 ----------- A 1
3 1.2 ----------- A 1
4 1.3 ----------- A 1
5 2 Forest A 2
6 2.1 ----------- A 2
7 2.3 ----------- A 2
8 2.4 ----------- A 2
9 B Manufacturing B
10 3 Autos B 3
11 3.1 ----------- B 3
12 3.2 ----------- B 3
13 3.3 ----------- B 3
Press any key to continue . . .