Python CSV将数字添加到空单元格

2024-09-30 06:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

Python 3.8。我有一个包含12000行和4列的CSV文件。一列在不同的地方有4000多个空白单元格。从顶部开始,我需要在每个空白单元格中放置一个从1开始的序列号

现有的

First,Sec,Third,Fourth
R,E,C,D
S,F,C,D
blank,S,C,D
V,G,C,D
blank,Q,C,D
blank,F,C,D
E,W,C,D

提议的

First,Sec,Third,Fourth
R,E,C,D
S,F,C,D
1,S,C,D
V,G,C,D
2,L,C,D
3,F,C,D
E,W,C,D

我是个新手,但这正是我要做的。先谢谢你

import csv
 
with open('Original.csv', newline='') as DataIn2:
        fileReader2 = csv.reader(DataIn2)

Start_Number = 0
Number_Fill = Start_Number + 1

if (fileReader2['Data ID'].isnull().Number_Fill
else next(row) ???

with open('New.csv', 'w', newline='') as DataOut2:
    fileWriter2 = csv.writer(DataOut2)

Tags: csvnumberaswithnewlinesecopenstart
3条回答

更易于使用和处理df,然后您可以保存已处理的df:

import pandas as pd

df = pd.read_csv('Original.csv')

Start_Number = 1
for i,row in df.iterrows():
    if pd.isnull(row['Data ID']):
        df.loc[i,'Data ID'] = Start_Number;
        Start_Number +=1

df.to_csv('New.csv')

如果使用pandas是一个选项,那么给定测试数据,您可以尝试以下操作:

import pandas as pd

df = pd.read_csv('PSNIstreetCrimeMapDataRefined_Test.csv',delimiter=',')
df['First'] = df['First'].fillna(df['First'].isnull().cumsum())

输出

>>> df
  First Sec Third Fourth
0     R   E     C      D
1     S   F     C      D
2     1   S     C      D
3     V   G     C      D
4     2   Q     C      D
5     3   F     C      D
6     E   W     C      D

pandas将空白文件读取为NaNs,我用NaN值的累积和填充NaN值。您可以将输出csv保存为以下内容:

df.to_csv('PSNIstreetCrimeMapDataRefinedAgain_Test.csv',index=False)

更一般的方法

如果一个或多个列具有blank行(即NaN值)。例如:

>>> df
  First  Sec Third Fourth
0     R    E     C      D
1     S  NaN     C      D
2   NaN    S     C      D
3     V    G     C      D
4   NaN    Q     C      D
5   NaN  NaN     C      D
6     E    W     C      D

我们可以将apply方法与上述解决方案结合使用:

df = df.apply(lambda x : x.fillna(x.isnull().cumsum()))
print(df)

输出:

  First Sec Third Fourth
0     R   E     C      D
1     S   1     C      D
2     1   S     C      D
3     V   G     C      D
4     2   Q     C      D
5     3   2     C      D
6     E   W     C      D

首先,阅读您的代码我想您希望csv的每一行都是一个字典,然后您应该使用fileReader2 = csv.DictReader(CrimeDataIn2)

其次,由于您是Python新手,所以首先要将csv读取器转换为列表,以便了解如何处理它

reader = list(fileReader2)

reader将是一个字典列表,您可以使用for循环对其进行迭代:

for row in reader:

然后,您要为每一行验证row['Crime ID']是否为空。如果是,则替换为数字填充,并在数字填充中添加1。你不需要一个else语句

请注意,使用熊猫可能比使用csv更容易

相关问题 更多 >

    热门问题