Заменить значение в существующем столбце .csv pandas - PullRequest
0 голосов
/ 13 ноября 2018

Допустим, у меня есть CSV, где пример строки выглядит так: [' ', 1, 2, 3, 4, 5], где обозначает пустую ячейку.Я хочу перебрать все строки в .csv и заменить все значения в первом столбце для каждой строки другим значением, например [100, 1, 2, 3, 4, 5].Как это можно сделать?Также стоит отметить, что у столбцов нет меток (они были преобразованы из .xlsx).

В настоящее время я пытаюсь это сделать:

for i, row in test.iterrows():
    value = randomFunc(x, row)

    test.loc[test.index[i], 0] = value

Но это добавляет столбецв конце с меткой 0.

Ответы [ 4 ]

0 голосов
/ 13 ноября 2018

Используйте iloc для выбора первого столбца по позиции с replace с помощью регулярного выражения для нуля или более пробелов:

df = pd.DataFrame({
        0:['',20,' '],
         1:[20,10,20]
})


df.iloc[:, 0] = df.iloc[:, 0].replace('^\s*$',100, regex=True)
print (df)
     0   1
0  100  20
1   20  10
2  100  20
0 голосов
/ 13 ноября 2018

Почему бы вам не сделать что-то подобное:

df = pd.DataFrame([1, ' ', 2, 3, ' ', 5, 5, 5, 6, 7, 7])
df[df[0] == " "] = rd.randint(0,100)

Вывод:

    0
0   1
1   10
2   2
3   3
4   67
5   5
6   5
7   5
8   6
9   7
10  7
0 голосов
/ 13 ноября 2018

Вот решение с использованием csv модуля

import csv
your_value = 100    # value that you want to replace with
with open('input.csv', 'r') as infile, open('output.csv', 'w') as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    for row in reader:
        row[0] = your_value
        writer.writerow(row)
0 голосов
/ 13 ноября 2018

Вам не нужен цикл for при использовании панд и numpy,

Просто пример ниже, где у нас есть b и c пустые, которые были заменены на replace метод:

 import pandas as pd
 import numpy as np

>>> df
   0
a  1
b
c

>>> df.replace('', 100, inplace=True)
>>> df
     0
a    1
b  100
c  100

Пример замены пустых ячеек в определенном столбце:

В приведенном ниже примере у нас есть два столбца col1 и col2, где col1 с пустыми ячейками по индексам 2 и 4 в col1.

>>> df
  col1 col2
0    1    6
1    2    7
2
3    4
4        10

Просто для замены вышеупомянутых пустых ячеек только в col1:

Однако, когда мы говорим col1, то это подразумевает все строки вплоть до самого столбца, что удобно в некотором смысле.

>>> df.col1.replace('', 100, inplace=True)
>>> df
   col1 col2
0     1    6
1     2    7
2   100
3     4
4   100   10

Другой способ Просто выберите столбец DataFrame Специфично:

>>> df['col1'] =  df.col1.replace('', 100, regex=True)
>>> df
   col1 col2
0     1    6
1     2    7
2   100
3     4
4   100   10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...