假设我有一个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 :(得分: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循环,
只是一个示例在下面的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
在col1
的索引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)