Преобразование True / False в 1/0 Python [дубликат]

Я думаю, что это решение не самое лучшее, поскольку оно работает только для int , но я думаю, что это отлично для новичков.

  public class NumberWordConverter {  public static final String [] units = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten  «одиннадцать», «двенадцать», «тринадцать», «четырнадцать», «пятнадцать», «шестнадцать», «семнадцать», «восемнадцать», «девятнадцать»);  public static final String [] tens = {"", // 0 "", // 1 "двадцать", // 2 "тридцать", // 3 "сорок", // 4 "пятьдесят", // 5 "  шестьдесят ", // 6" семьдесят ", // 7" восемьдесят ", // 8" девяносто "// 9};  public static String convert (final int n) {if (n & lt; 0) {return "минус" + convert (-n);  } if (n & lt; 20) {return units [n];  } if (n & lt; 100) {return tens [n / 10] + ((n% 10! = 0)? "": "") + единиц [n% 10];  } if (n & lt; 1000) {возвратные единицы [n / 100] + "сто" + ((n% 100! = 0)? "": "") + конвертировать (n% 100);  } if (n & lt; 1000000) {return convert (n / 1000) + "тыс." + ((n% 1000! = 0)? "": "") + конвертировать (n% 1000);  } if (n & lt; 1000000000) {return convert (n / 1000000) + "million" + ((n% 1000000! = 0)? "": "") + convert (n% 1000000);  } return convert (n / 1000000000) + «миллиард» + ((n% 1000000000! = 0)? "": "") + конвертировать (n% 1000000000);  } public static void main (final String [] args) {final Random generator = new Random ();  int n;  for (int i = 0; i & lt; 20; i ++) {n = generator.nextInt (Integer.MAX_VALUE);  System.out.printf ("% 10d = '% s'% n", n, convert (n));  } n = 1000;  System.out.printf ("% 10d = '% s'% n", n, convert (n));  n = 2000;  System.out.printf ("% 10d = '% s'% n", n, convert (n));  n = 10000;  System.out.printf ("% 10d = '% s'% n", n, convert (n));  n = 11000;  System.out.printf ("% 10d = '% s'% n", n, convert (n));  n = 999999999;  System.out.printf ("% 10d = '% s'% n", n, convert (n));  n = Integer.MAX_VALUE;  System.out.printf ("% 10d = '% s'% n", n, convert (n));  }}  

Тест создает 20 случайных чисел до Integer.MAX_VALUE , а некоторые из них знают, что они проблематичны из-за 0, 10 и т. д. Выход :

  5599908 = «пять миллионов пятьсот девяносто девять тысяч девятьсот восемь» 192603486 = «сто девяносто два миллиона шестьсот три тысячи четыреста восемьдесят шесть» 1392431868 = «один миллиард триста девяносто  два миллиона четыреста тридцать одна тысяча восемьсот шестьдесят восемь »1023787010 =« один миллиард двадцать три миллиона семьсот восемьдесят семь тысяч десять »1364396236 =« один миллиард триста шестьдесят четыре миллиона триста девяносто шесть тысяч двести тридцать шесть »1511255671 =  один миллиард пятьсот одиннадцать миллионов двести пятьдесят пять тысяч шестьсот семьдесят один «225955221 =« двести двадцать пять миллионов девятьсот пятьдесят пять тысяч двести двадцать один »1890141052 =« один миллиард восемьсот девяносто миллионов сто сорок одна тысяча пятьдесят два  '261839422 =' два  сто шестьдесят один миллион восемьсот тридцать девять тысяч четыреста двадцать два »728428650 =« семьсот двадцать восемь миллионов четыреста двадцать восемь тысяч шестьсот пятьдесят »860607319 =« восемьсот шестьдесят миллионов шестьсот семь тысяч триста девятнадцать »719753587 =« семь  сто девятнадцать миллионов семьсот пятьдесят три тысячи пятьсот восемьдесят семь »2063829124 =« два миллиарда шестьдесят три миллиона восемьсот двадцать девять тысяч сто двадцать четыре »1081010996 =« один миллиард восемьдесят один миллион десять тысяч девятьсот девяносто шесть »999215799 =« девять  сто девяносто девять миллионов двести пятнадцать тысяч семьсот девяносто девять »2105226236 =« два миллиарда сто пять миллионов двести двадцать шесть тысяч двести тридцать шесть »1431882940 =« один миллиард четыреста тридцать один миллион восемьсот восемьдесят две тысячи девятьсот сорок  '1991707241 =' один миллиард девятьсот девяносто один миллион семьсот семь тысяч две сотни форт  y one '1088301563 =' один миллиард восемьдесят восемь миллионов триста одна тысяча пятьсот шестьдесят три '964601609 =' девятьсот шестьдесят четыре миллиона шестьсот одна тысяча шестьсот девять '1000 =' одна тысяча '2000 =' две тысячи '10000 =  «десять тысяч» 11000 = «одиннадцать тысяч» 999999999 = «девятьсот девяносто девять миллионов девятьсот девяносто девять тысяч девятьсот девяносто девять» 2147483647 = «два миллиарда сто сорок семь миллионов четыреста восемьдесят три тысячи шестьсот сорок семь»  

Надеюсь, что это поможет:)

56
задан Simon Righley 30 June 2013 в 19:05
поделиться

4 ответа

True является 1 в Python, а также False является 0 *:

>>> True == 1
True
>>> False == 0
True

Вы должны иметь возможность выполнять любые операции, которые вы хотите на них, просто обрабатывая их как если бы они были числами, поскольку они являются номерами:

>>> issubclass(bool, int)
True
>>> True * 5
5

Итак, чтобы ответить на ваш вопрос, никакой работы не требуется - у вас уже есть то, что вы ищете.

* Примечание. Я использую как как английское слово, а не ключевое слово Python is - True не будет тем же объектом, что и любой случайный 1.

30
ответ дан Gareth Latty 15 August 2018 в 20:53
поделиться
  • 1
    Отлично, не знал об этом, спасибо! – Simon Righley 29 June 2013 в 19:05
  • 2
    Просто будьте осторожны с типами данных при выполнении математики с плавающей запятой: np.sin(True).dtype для меня float16. – jorgeca 29 June 2013 в 19:09
  • 3
    У меня есть dataframe с булевым столбцом, и я могу называть df.my_column.mean() просто отлично (как вы подразумеваете), но когда я пытаюсь: df.groupby("some_other_column").agg({"my_column":"mean"}), я получаю DataError: No numeric types to aggregate, поэтому, похоже, они NOT всегда одно и то же. Просто FYI. – dwanderson 15 December 2016 в 22:10

Вы также можете сделать это непосредственно на фреймах

In [104]: df = DataFrame(dict(A = True, B = False),index=range(3))

In [105]: df
Out[105]: 
      A      B
0  True  False
1  True  False
2  True  False

In [106]: df.dtypes
Out[106]: 
A    bool
B    bool
dtype: object

In [107]: df.astype(int)
Out[107]: 
   A  B
0  1  0
1  1  0
2  1  0

In [108]: df.astype(int).dtypes
Out[108]: 
A    int64
B    int64
dtype: object
17
ответ дан Jeff 15 August 2018 в 20:53
поделиться

Просто умножьте свой Dataframe на 1 (int)

[1]: data = pd.DataFrame([[True, False, True], [False, False, True]])
[2]: print data
          0      1     2
     0   True  False  True
     1   False False  True

[3]: print data*1
         0  1  2
     0   1  0  1
     1   0  0  1
30
ответ дан shubhamgoel27 15 August 2018 в 20:53
поделиться

Чтобы точно ответить на вопрос о том, как преобразовать один столбец логических значений в столбец целых чисел 1 или 0:

df.somecolumn = df.somecolumn.astype(int)

128
ответ дан User 15 August 2018 в 20:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: