如何使用现有列中提取的数据创建新的DataFrame列

时间:2019-04-22 15:34:00

标签: python dataframe

大家好,我有以下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

非常感谢您的想法。

1 个答案:

答案 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 . . .
相关问题