检测CSV数据数组上的字符串并添加2个单元格b

2024-06-28 19:07:31 发布

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

我很困惑csv数据处理,任何帮助都会很好。你知道吗

我有一个csv文件,有多个列,如下所示:

col_1;col_2;col_3;col_4;col_5;col_6;col_7;col_8;
Object1;123;Something;456;Something2;0;0;someword;789
Object2;123;Something;456;Something2;0;0;someword;789
Object3;123;Something;456;Something2;0;0;someword;789
Object4;123;Something;456;Something2;0;0;someword;789

但有些对象在第6列、第7列和第8列上缺少数据,而在第6列中有一个关键字:

col_1;col_2;col_3;col_4;col_5;col_6;col_7;col_8;
Object1;123;Something;456;Something2;0;0;someword;789
Object2;123;Something;456;Something2;0;0;someword;789
Object3;123;Something;456;Something2;Keyword;789;Object4;123
Something;456;Something2;0;0

我检测到有多少行包含这些关键字和行数:

import csv
class FixIt:
 def test(self):
  count = 0
  with open('input.csv',mode='r') as file
   read = csv.reader(file)
   for num,row in enumerate(reader):
   count+=1
   if 'Keyword' in row[0]:
    print num, row
    count+=1
   print(count)
TryIt = FixIt()
TryIt.test()

我需要在关键字之前的单元格上放置x2个零或somestring值,以便将输出重新排序为原始结构,如:

col_1;col_2;col_3;col_4;col_5;col_6;col_7;col_8;col_9
Object1;123;Something;456;Something2;0;0;someword;789
Object2;123;Something;456;Something2;0;0;someword;789
Object3;123;Something;456;Something2;corrective_data;corrective_data;Keyword;789
Object4;123;Something;456;Something2;0;0;someword;789

也许与熊猫可以做,但我不知道在哪里或如何开始,一些方向或答案将不胜感激。你知道吗

尝试1:

我尝试将每行上的字符串关键字替换为0;0;关键字:

with open("input.csv", "r") as file_input:
 with open("output.csv", "w") as file_output:
  for line in file_input:
   file_output.write(line.replace('Keyword','0;0;Keyword'))

但结果是错误的,它在每个单元格中添加了一个“;”,并将字符串“;”0;0;关键字也放入其中。在用vim查看了这个文件之后,我发现我还需要在789之后添加一个新行(因为我将“”视为特征线)。你知道吗

我现在很迷茫,也许为每一行创建一个对象和一个属性列表会更好(?)。你知道吗


Tags: csvinputcountwithcol关键字keywordsomething
1条回答
网友
1楼 · 发布于 2024-06-28 19:07:31

不确定这是否是您想要的,因为第二个代码单元中的数据格式不正确。我假设您要进行以下更改:

col_1;col_2;col_3;col_4;col_5;col_6;col_7;col_8;col_9
Object3;123;Something;456;Something2;0;0;someword;789
Object4;123;Something;456;Something2;Keyword;231

# TO #

col_1;col_2;col_3;col_4;col_5;col_6;col_7;col_8;col_9
Object3;123;Something;456;Something2;0;0;someword;789
Object3;123;Something;456;Something2;0;0;Keyword;231

因此,以下是您如何对熊猫进行更改:

import pandas as pd

# input data from csv file
data = pd.read_csv("input.csv", delimiter=';') 

# get the indices of rows with "Keyword" appearing in col_6
idxs = data.loc[data['col_6'] == "Keyword"].index 

# copy value in col_6 to col_8
data.set_value(idxs, 'col_8', data.iloc[idxs]['col_6']) 
# copy value in col_7 to col_9
data.set_value(idxs, 'col_9', data.iloc[idxs]['col_7']) 

data.set_value(idxs, 'col_6', 0) # fill col_6 with 0
data.set_value(idxs, 'col_7', 0) # fill col_7 with 0

# write result to a new file
data.to_csv("result.csv", sep=';')

相关问题 更多 >