我有一个包含4,000多行格式的CSV文件,如...
名称,价格,成本,数量
如何修剪我的CSV文件,只剩下我想要的20个名字?我能够解析/修剪CSV文件,我对如何搜索第1列空白了。
答案 0 :(得分:2)
使用pandas
!
import pandas as pd
df = pd.DataFrame({'name': ['abc', 'ght', 'kjh'], 'price': [7,5,6], 'cost': [9, 0 ,2], 'quantity': [1,3,4]})
df = pd.read_csv('input_csv.csv') # Your case you would import like this
>>> df
cost name price quantity
0 9 abc 7 1
1 0 ght 5 3
2 2 kjh 6 4
>>> names_wanted = ['abc','kjh']
>>> df_trim = df[df['name'].isin(names_wanted)]
>>> df_trim
cost name price quantity
0 9 abc 7 1
2 2 kjh 6 4
然后将文件导出到csv:
>>> df_trim.to_csv('trimmed_csv.csv', index=False)
完成!
答案 1 :(得分:1)
您可以循环访问csv.reader()。它会返回你的行。行由列表组成。比较列表的第一个元素,即row [0]。如果是您想要的,请将该行添加到输出列表中。
答案 2 :(得分:1)
您可以在单独的一行(可能称为target_names)上创建一个包含20个名称中每个名称的ASCII测试文件。然后,使用您的CSV文件(可能称为file.csv),在命令行(bash)上:
for name in $(cat target_names); do grep $name file.csv >> my_new_small_file.csv; done
如果您遇到区分大小写的问题,请使用grep -i。
答案 3 :(得分:1)
我不确定我是否理解你,但下面的片段可以做你想要的吗?
def FilterCsv(_sFilename, _aAllowedNameList):
l_aNewFileLines = []
l_inputFile = open(_sFilename, 'r')
for l_sLine in l_inputFile:
l_aItems = l_sLine.split(',')
if l_aItems[0] in _aAllowedNameList:
l_aNewFileLines.append(l_sLine)
l_inputFile.close()
l_outputFile = open('output_' + _sFilename, 'w')
for l_sLine in l_aNewFileLines:
l_outputFile.write(l_sLine)
l_outputFile.close()
希望这可以有所帮助!