2017-08-12 102 views
1

我正在尝试对某些降雨量数据进行数据分析。所述数据的示例是这样的: -将特定字符串转换为熊猫数字值

10 18/05/2016 26.9  40 20.8  34 52.2 20.8 46.5  45 
11 19/05/2016 25.5  32  0.3 41.6  42  0.3 56.3 65.2 
12 20/05/2016 8.5  29 18.4  9  36 18.4 28.6  46 
13 21/05/2016 24.5  18 TRACE 3.5  17 TRACE 4.4  40 
14 22/05/2016 0.6  18  0 6.5  14  0 8.6  20 
15 23/05/2016 3.5  9  0.6 4.3  14  0.6  7  15 
16 24/05/2016 3.6  25  T  3  12  T 14.9  9 
17 25/05/2016  25  21  2.2 25.6  50  2.2  25  9 

降雨量数据包含一个特定的字符串“TRACE”或“Ť”(既意味着非可测量的降雨量)。为了分析,我想将这个字符串转换为'1.0'(float)。我想要的数据应该是这样的,以便将这些值绘制为线图: -

10 18/05/2016 26.9  40 20.8  34 52.2 20.8 46.5  45 
11 19/05/2016 25.5  32  0.3 41.6  42  0.3 56.3 65.2 
12 20/05/2016 8.5  29 18.4  9  36 18.4 28.6  46 
13 21/05/2016 24.5  18  1.0 3.5  17  1.0 4.4  40 
14 22/05/2016 0.6  18  0 6.5  14  0 8.6  20 
15 23/05/2016 3.5  9  0.6 4.3  14  0.6  7  15 
16 24/05/2016 3.6  25  1.0  3  12  1.0 14.9  9 
17 25/05/2016  25  21  2.2 25.6  50  2.2  25  9 

有人能指出我的正确方向吗?

回答

3

您可以使用df.replace,然后使用df.astype数字转换为float(原始数据类型是object,等等这些列的任何操作仍然会从性能问题的影响):

df = df.replace('^T(RACE)?$', 1.0, regex=True) 
df.iloc[:, 1:] = df.iloc[:, 1:].astype(float) # converting object columns to floats 

这将取代全部为TTRACE元素为1.0。

输出:

10 18/05/2016 26.9 40 20.8 34.0 52.2 20.8 46.5 45.0 
11 19/05/2016 25.5 32 0.3 41.6 42.0 0.3 56.3 65.2 
12 20/05/2016 8.5 29 18.4 9.0 36.0 18.4 28.6 46.0 
13 21/05/2016 24.5 18  1 3.5 17.0  1 4.4 40.0 
14 22/05/2016 0.6 18  0 6.5 14.0  0 8.6 20.0 
15 23/05/2016 3.5 9 0.6 4.3 14.0 0.6 7.0 15.0 
16 24/05/2016 3.6 25  1 3.0 12.0  1 14.9 9.0 
17 25/05/2016 25.0 21 2.2 25.6 50.0 2.2 25.0 9.0 
+0

恭喜我吧!这是我的第1000个答案。 –

+0

谢谢你解决了这个问题。新规则不允许我在3分钟内接受答案。等待。 –

+0

我相信最初包含文本值的列(即“T”或“TRACE”)仍然是“object”类型。你应该把它们转换成浮动。 – Alexander

2

使用replace通过dict

df = df.replace({'T':1.0, 'TRACE':1.0}) 

然后,如果有必要转换列float

cols = df.columns.difference(['Date','another cols dont need convert']) 
df[cols] = df[cols].astype(float) 

df = df.replace({'T':1.0, 'TRACE':1.0}) 
cols = df.columns.difference(['Date','a']) 
df[cols] = df[cols].astype(float) 
print (df) 
    a  Date  2  3  4  5  6  7  8  9 
0 10 18/05/2016 26.9 40.0 20.8 34.0 52.2 20.8 46.5 45.0 
1 11 19/05/2016 25.5 32.0 0.3 41.6 42.0 0.3 56.3 65.2 
2 12 20/05/2016 8.5 29.0 18.4 9.0 36.0 18.4 28.6 46.0 
3 13 21/05/2016 24.5 18.0 1.0 3.5 17.0 1.0 4.4 40.0 
4 14 22/05/2016 0.6 18.0 0.0 6.5 14.0 0.0 8.6 20.0 
5 15 23/05/2016 3.5 9.0 0.6 4.3 14.0 0.6 7.0 15.0 
6 16 24/05/2016 3.6 25.0 1.0 3.0 12.0 1.0 14.9 9.0 
7 17 25/05/2016 25.0 21.0 2.2 25.6 50.0 2.2 25.0 9.0 

print (df.dtypes) 
a   int64 
Date  object 
2  float64 
3  float64 
4  float64 
5  float64 
6  float64 
7  float64 
8  float64 
9  float64 
dtype: object 
0

扩展从@jezrael的回答,您可以替换和转换成一个单一的声明浮动(假设第一列是Date剩下的都是所需的数字列):

df.iloc[:, 1:] = df.iloc[:, 1:].replace({'T':1.0, 'TRACE':1.0}).astype(float)