替换现有列.csv熊猫中的值

时间:2018-11-13 05:59:03

标签: python pandas csv

假设我有一个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

但这会在标签的末尾添加一列。

4 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:1)

使用pandas和numpy时不需要for循环,

只是一个示例在下面的bc为空的情况下,我们将其替换为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

替换“特定”列中空白单元格的示例:

在下面的示例中,我们有两列col1col2,其中col1col1的索引2和4处有一个空单元格。

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

答案 2 :(得分:0)

您为什么不做这样的事情:

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

答案 3 :(得分:0)

这是使用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)