Пустой фрейм данных pandas с более чем 300 столбцами

#python #pandas

#python #pandas

Вопрос:

Я использовал следующий код для вставки большого количества пустых столбцов из файла txt в файл csv, но я не могу присвоить какой-либо строке или столбцу значения.

 data = pd.read_csv('DefaultPermList.txt',sep='n',header=None)
data = data.set_index(0).T
data.to_csv('./data.csv', index = False)

df = pd.read_csv("data.csv")
  

Я просто хочу присвоить всей строке, состоящей из более чем 300 столбцов, значение 0 внутри моего CSV-файла. Я также хотел бы спросить, как я могу присвоить определенной строке или столбцу значение и как я могу сравнить значение, скажем, строку с именем столбца, чтобы проверить, соответствует ли оно имени столбца, и я могу присвоить ему значение 1?

Я также использовал это, но это не работает:

 df.loc[len(df.index)] = 0
  

Вот ожидаемый пример:

 APK       Andriod.permission.abc    Andriod.permission.cde     Android.perm.xyz .. up to 300  columns
abc.apk             0                        0                           0
cde.apk             0                        0                           0
  

Таким образом, в основном, в первом столбце (APK) будут храниться только строковые значения, в то время как остальным столбцам будет присвоено значение 0. Я хочу, чтобы он также был сохранен в моем csv-файле после установки значений.

ОБНОВЛЕНИЕ: я использовал это, чтобы присвоить значение целой строке, и это сработало.

 df.loc[0, :] = 0
  

Новая проблема заключается в:
Я хочу, чтобы все строки и столбцы были равны 0. кроме первого столбца. В первом столбце будет храниться только строковое значение.
Также я хотел бы знать, как я могу присвоить значение определенному индексу строки и столбца.
Кроме того, как я могу установить диапазон для проверки имени конкретной строки с именем столбца, предположим, диапазон от столбца 2 до 320.

Комментарии:

1. Пожалуйста, отправьте пример ввода с ожидаемым результатом.

2. Теперь ему предоставлен ожидаемый результат

3. Я думаю, вам нужен https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html образец вашего ввода?

4. Это ожидаемый образец, который я хочу. в настоящее время он показывает только пустую структуру только с именами столбцов.

5. посмотрите, сработал ли новый ответ. Я думаю, вам следует сделать df.iloc[:,1:] = 0

Ответ №1:

обновите более 300 столбцов, исключая первый столбец

Поскольку у вас есть более 300 столбцов для обновления до нуля, я рекомендую выполнить следующее:

 df = pd.read_csv("data.csv")
df.iloc[:,1:] = 0
  

Это обновит все столбцы, кроме первого 1, до нуля.

обновите определенные столбцы до нуля

Я думаю, это то, что вы ищете:

 import pandas as pd
df = pd.DataFrame({'APK':['abc.apk','bcd.apk','cde.apk','def.apk']})
df[['abc','bcd','cde','def']] = 0
print (df)
  

Альтернативно, вы также можете дать:

 df.loc[:,['abc','bcd','cde','def']] = 0
  

Это заменит только указанные столбцы на ноль.

Это приведет к:

        APK  abc  bcd  cde  def
0  abc.apk    0    0    0    0
1  bcd.apk    0    0    0    0
2  cde.apk    0    0    0    0
3  def.apk    0    0    0    0
  

установите для всех значений в фрейме данных значение 0

В pandas у вас есть несколько вариантов. Чтобы установить для всех значений в фрейме данных значение 0, просто укажите:

 df[::] = 0
  

или

 df.loc[:] = 0
  

или

 df.iloc[:] = 0
  

Аналогично, вы можете изменить значение строки, используя один из этих параметров:

 df[1:2] = 1 #to replace row 1 with value = 1

df.loc[1] = 2 #to replace row 1 with value = 2 using loc

df.iloc[1] = 3 #to replace row 1 with value = 3 using iloc
  

Вы также можете заменить значения в столбце аналогичным образом:

 df['a'] = 1 # to replace column 'a' with value = 1

df.loc[:,'a'] = 2 # to replace column 'a' with value = 2

df.iloc[:,0] = 3 # to replace first column ('a') with value = 3
  

Комментарии:

1. Ну, это не работает с пустым фреймом данных или набором, который состоит только из столбцов.

2. @TR9, если у вас пустой фрейм данных, как вы присваиваете значение строке. Разве он уже не пуст. Вы хотите сохранить ноль в столбцах со 2 по n с нулем?

3. Ну, я использовал это: df.loc[0, :] = 0, и это сработало, чтобы присвоить всей строке значение 0. Но теперь я застрял в том, как я могу присвоить значение в определенном столбце и строке 1, также я хотел присвоить первому столбцу строковое значение, а остальным столбцам 0.

4. Да, это решает, но я использую текстовый файл для импорта этих столбцов. Пожалуйста, взгляните на мою обновленную проблему, о которой я упоминал в теме.

5. Вы также можете указать что-то вроде этого: df.loc[:,['abc','bcd','cde','def']] = 0 . Он создаст столбец, если он не существует, и присвоит ему значение 0.

Ответ №2:

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

Чтобы присвоить всей строке значение 0, используйте что-то вроде этого:

 df.loc[$row$, $column$] = 0
  

Установите $row $ = ‘:’ если вам нужны все строки, в противном случае вы можете выбирать строки по индексу или условию, чтобы соответствовать более чем 1 строке.

Установите $column $ = ‘:’ если вам нужны все столбцы, или вы можете указать имя столбца или список имен столбцов.

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

 df.loc[1, :] = 0
  

Обновление: если вы хотите изменить все значения в столбцах на 0 для строки, где APK = abc.apk, используйте это:

 df.loc[df[df['APK']=='abc.apk'].index, :] = 0
  

Комментарии:

1. Хорошо, это сработало: df.loc[1, :] = 0, но, похоже, он не был сохранен в файл csv. Я хочу, чтобы он был сохранен в файле csv. Я хочу изменить все значения на 0, кроме первого столбца, который является APK, остальные столбцы равны 0

2. После замены значений на 0, которые вы хотите, просто используйте ту же строку кода, которую вы использовали для сохранения в csv-файл. df.to_csv(filename)

Ответ №3:

Создайте новую строку в виде словаря с ключами из имен столбцов и значений 0.
Затем добавьте его в свой фрейм данных:

 new_row = dict.fromkeys(df, 0)
df = df.append(new_row, ignore_index=True)
  

Примечание:

Если вам нужна строка в первом столбце (и нули во всех остальных), замените первый ключ в new_row словаре на эту строку, прежде чем добавлять ее:

 new_row[df.columns[0]] = "something"
  

Ответ №4:

Что вы хотите сделать, это:

 for i in range(len(df.index)):
    df.loc[i] = 0
  

Чтобы присвоить значение на основе условия, это было бы примером:

 df.loc[df['value to be compared'] == 'string','column_name'] = 1
  

Комментарии:

1. первый фрагмент не сработал, но другой ответ устранил первую проблему. Во втором фрагменте, который вы предоставили, я хотел сравнить строковое значение с именем столбца над ним.

2. да, затем поместите имя столбца над ним как 'string'