Я решил проблему таким образом. (Предполагается, что вы можете иметь данные в формате CSV в Excel)
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 . . .