Умножение Pandas DataFrame на пропущенные значения

Используйте это.
{
  /your/first/command
  /your/second/command
} &> /dev/null

Объяснение

Чтобы исключить вывод команд, у вас есть две возможности:

  • Закройте выходной файл дескриптора , что не позволяет ему принимать какие-либо дополнительные данные. Это выглядит так:
    your_command "Is anybody listening?" >&-
    
    Обычно вывод идет либо в дескриптор файла 1 (stdout), либо 2 (stderr). Если вы закроете дескриптор файла, вам нужно будет сделать это для каждого нумерованного дескриптора, так как &> (ниже) является специальным синтаксисом BASH, несовместимым с >&-:
    /your/first/command >&- 2>&-
    
    Будьте внимательны, чтобы отметить порядок: >&- закрывает stdout , что вы хотите сделать; &>- перенаправляет stdout и stderr в файл с именем - (дефис), что не то, что вы хотите сделать. Сначала он будет выглядеть одинаково, но последний создает в вашем рабочем каталоге бродячий файл. Легко запомнить: >&2 перенаправляет stdout на дескриптор 2 (stderr), >&3 перенаправляет stdout в дескриптор 3, а >&- перенаправляет stdout в тупик (т. Е. Закрывает stdout). Также будьте осторожны, что некоторые команды могут не обрабатывать дескриптор закрытого файла особенно хорошо («write error: Bad file descriptor»), поэтому лучшим решением может быть ...
  • Перенаправить вывод на /dev/null , который принимает весь вывод и ничего не делает с ним. Это выглядит так:
    your_command "Hello?" > /dev/null
    
    Для перенаправления вывода в файл вы можете направить как stdout, так и stderr в одно и то же место очень кратко, но только в bash:
    /your/first/command &> /dev/null
    

Наконец, делать то же самое для нескольких команд сразу, окружать все это в фигурных скобках. Bash рассматривает это как группу команд , агрегируя дескрипторы выходных файлов, чтобы вы могли перенаправить все сразу. Если вы знакомы с подоболочками с использованием синтаксиса ( command1; command2; ), вы обнаружите, что фигурные скобки ведут себя почти точно так же, за исключением того, что, если вы не вовлечете их в трубу, скобки не будут создавать подоболочку и, таким образом, позволят вам установить переменные внутри.

{
  /your/first/command
  /your/second/command
} &> /dev/null

Для получения дополнительной информации, параметров и синтаксиса см. руководство bash о перенаправлениях .

1
задан Crovish 23 February 2019 в 07:59
поделиться

1 ответ

Я думаю, что здесь лучше использовать пропущенные значения вместо .. по to_numeric с errors='coerce', поэтому делим работу очень хорошо:

df2 = pd.DataFrame({'Country': [ 'US', 'IT', 'FR'],
                'Unit': [ 'USD', 'EUR', 'EUR'],
                  'Location': [ 'Hawai', 'Torino', 'Paris'],
                  '2000': [2, '..',6],
                    '2002': [8,10,12]
                   })
df2.set_index(['Country','Unit','Location'],inplace=True)

df2.columns=df2.columns.astype(int)
s= df.Value.unstack(fill_value=1)
df2 = df2.apply(lambda x: pd.to_numeric(x, errors='coerce')).mul(s)
print (df2)
                            2000       2002
Country Unit Location                      
US      USD  Hawai      3.528105   3.201258
IT      EUR  Torino          NaN  22.408932
FR      EUR  Paris     11.205348 -11.727335

Если только не числовые значения .. другое решение - использовать replace:

df2 = df2.replace('..', np.nan).mul(s)
0
ответ дан jezrael 23 February 2019 в 07:59
поделиться
Другие вопросы по тегам:

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