我是编程新手,我有一堆 CSV 文件,每个文件大约有 50 到 60 行。在未指定数量的行之后,第二列中有一个名为“NAME”的字符串。我想获取“NAME”之后第二列中的所有内容并将其打印到文本文件中。我最初想使用 pandas 和skiprows 来执行此操作,但问题是我运行的每个 csv 都会在不同的行中包含“NAME”。另外,如果有帮助的话,每个 CSV 中“NAME”之前三行都有一个空行。
header, header
header, header
NUMBER,ITEM
N1,Shoe
N2,Heel
N3,Tee, random stuff
N4,Polo, random stuff
N5,Sneaker
N10,Heel
N11,Tee
...
...
...
How
Count 17
SORT,NAME
H1,Thing, random stuff
H2,WTANK
H3,TEE2
H4,TEE
我还希望文本文件中没有重复,因为我将在目录中运行大约 1000 个 CSV。这是我开始使用的一些代码,也是我遇到困难的地方。
import pandas as pd
import csv
import glob
fns = glob.glob('*.csv') #goes through every CSV file in director
for csv in fns:
prod_df = pd.read_csv(csv, skiprows=???)
with open (os.path.join('out', fn), 'wb') as f:
w = csv.writer(f)
test_alias = prod_df['NAME'].unique()
w.writerow(row)
我知道它不起作用,并且可能不是一段很好的代码。任何帮助将不胜感激。谢谢!
最佳答案
假设 NAME
仅出现一次,您可以使用 get_loc
import pandas as pd
import glob
fn = 'out.csv'
fns = glob.glob('*.csv') #goes through every CSV file in director
colname = 'ITEM'
rowname = 'NAME'
for csv in fns:
s = pd.read_csv(csv, usecols=[colname], squeeze=True, skiprows=7, header=0)
row_idx = pd.Index(s).get_loc(rowname)
sub_items = s[row_idx + 1:]
pd.Series(sub_items.unique()).to_csv(fn, mode='a')
编辑:说明
usecols
仅读取您需要的列,即 ITEM
squeeze=True
返回一个Series
get_loc
返回其参数的索引
您说过您想要 'NAME'
之后的所有内容,因此索引为 row_idx + 1
mode='a'
会附加到单个 csv 文件(称为 out.csv
)文件,那么你应该相应地调整你的代码
关于python - 取出 CSV 的一些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18344887/