数据帧充满字符串(带一些空字符串);想将一些列转换为整数,将一些列转换为浮点数,并将一些列转换为字符串

时间:2017-08-29 04:24:24

标签: python pandas dataframe

假设我有一个由14列组成的数据框,所有单元格都是字符串。

这些字符串中的一些是带字母的实际单词。我想将这些列保留为字符串(索引0,3,4和13)。

其中一些字符串是整数,没有小数位。我想将一些列转换为整数(索引1:2,5:7,9:10,12)。

最后,剩下的字符串是带小数位的数字。我想将这些剩余的列转换为浮点数(索引6,8,11)

以下是数据框中的示例:

0  1         2     3   4    5  6   7  8    9  10  11   12    13 

0  Joe Blow  1947  29  CLE  Q  4   1  0.3  4  5   6.5  2.4   Joe.htm
1  Ed Blow   1972  24  HOU  Q  18  1  0.8  4  2   2.5        Ed.htm
2  Jim Blow  1974  23  CHI  Q  18  3  2.2  2      0.8  3.83  Jim.htm  
3  Al Blow   1995      STL  Q  16  2       5  1   3.1  4.5   Frank.htm
4  Tom Blow  1969  23  DET  Q  14  1  0.8  3  0   2.4  4.0   Tom.htm




[5 rows x 14 columns]

1 个答案:

答案 0 :(得分:2)

您可以将to_numericcombine_first一起使用,但如果NaN s,则int列会因为每个设计而转换为float

df = df.apply(pd.to_numeric, errors='coerce').combine_first(df)

print (df)
     0     1     2     3    4  5   6  7    8  9   10   11    12         13
0  Joe  Blow  1947  29.0  CLE  Q   4  1  0.3  4  5.0  6.5  2.40    Joe.htm
1   Ed  Blow  1972  24.0  HOU  Q  18  1  0.8  4  2.0  2.5   NaN     Ed.htm
2  Jim  Blow  1974  23.0  CHI  Q  18  3  2.2  2  NaN  0.8  3.83    Jim.htm
3   Al  Blow  1995   NaN  STL  Q  16  2  NaN  5  1.0  3.1  4.50  Frank.htm
4  Tom  Blow  1969  23.0  DET  Q  14  1  0.8  3  0.0  2.4  4.00    Tom.htm

print (df.dtypes)
0      object
1      object
2       int64
3     float64
4      object
5      object
6       int64
7       int64
8     float64
9       int64
10    float64
11    float64
12    float64
13     object
dtype: object