#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'