Python Pandas: замена значений с плавающей запятой в строковых столбцах? - PullRequest
0 голосов
/ 29 марта 2020

Pandas имеет методы isnull () и fillna () для замены значений NaN в DataFrames. У меня есть набор данных, который в основном содержит строковые столбцы, но в некоторых столбцах есть несколько значений с плавающей запятой, разбросанных по ним. Есть ли в Pandas некоторые эквивалентные методы для поиска и замены этих данных?

Так что, если у меня есть DataFrame, подобный этому:

In [60]: df1=pd.DataFrame([[1.0,'foo'],[2.0,1.0],[float('NaN'),'bar'],[4.0,0.0],[5.0,'baz']],columns=['fval','sval'])
In [61]: df1
Out[61]: 
   fval sval
0   1.0  foo
1   2.0    1
2   NaN  bar
3   4.0    0
4   5.0  baz

In [63]: df1.isnull()
Out[63]: 
    fval   sval
0  False  False
1  False  False
2   True  False
3  False  False
4  False  False

... Я могу заменить значения NaN в Столбец 'fval', подобный следующему:

In [64]: df1.fillna(2.5)
Out[64]: 
   fval sval
0   1.0  foo
1   2.0    1
2   2.5  bar
3   4.0    0
4   5.0  baz

Есть ли в Pandas удобный метод для замены значений 0 и 1 в столбце 'sval', скажем, 'na'? Как насчет эквивалента isnull () для значений вне места?

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Если вы хотите производить замену строк вручную, вы можете использовать следующий оператор замены:

df1.replace([0, 1], "na")

Все значения, которые равны 0 или 1, будут заменены на строку «na».

Однако, как указал @ anky_91, вы можете также заменить указанные значения на np.nan. После замены вы можете идентифицировать значения NaN, как в столбцах с плавающей запятой. Это, вероятно, то, что вы на самом деле ищете.

df1.replace([0, 1], np.nan)

Более подробную информацию о том, как использовать замену, вы можете найти здесь .

0 голосов
/ 03 апреля 2020

Думаю, нет Pandas - родного способа сделать это. Но использование apply дает то, что я хочу:

df1['sval'].apply(lambda val: str(val) if type(val)!=str else val)
...