Python 特定CSV读取筛选
我对Python还很陌生,所以我可能正在寻找一个简单的解决方案,但迄今为止我所尝试的一切都是徒劳的 我有数百个相同格式的CSV文件。我的格式是 --文件名(不重要) --单个数值(不重要) --重要列名行 --还有两行不重要的格式化垃圾 --数千行重要数据 --几行空白 --又是成千上万排不重要的垃圾 我需要对其进行格式化,以便能够轻松获取列名和下面的重要数据。设置格式时,列名总是在第5行,数据总是从第8行开始,但数据量可以从几百到几千 编辑:我把标题的确切行号弄错了。此外,我忘了提到我需要将结果保存到数据框中以供将来分析 这是csv文件顶部的图像 这是csv文件底部的图像。请注意,当它从“重要数据”切换到“不重要数据”时,列数会增加,这可能会使编程变得困难。 如果您没有熊猫:Python 特定CSV读取筛选,python,csv,dataframe,Python,Csv,Dataframe,我对Python还很陌生,所以我可能正在寻找一个简单的解决方案,但迄今为止我所尝试的一切都是徒劳的 我有数百个相同格式的CSV文件。我的格式是 --文件名(不重要) --单个数值(不重要) --重要列名行 --还有两行不重要的格式化垃圾 --数千行重要数据 --几行空白 --又是成千上万排不重要的垃圾 我需要对其进行格式化,以便能够轻松获取列名和下面的重要数据。设置格式时,列名总是在第5行,数据总是从第8行开始,但数据量可以从几百到几千 编辑:我把标题的确切行号弄错了。此外,我忘了提到我需要将结
pip安装熊猫
读取\u csv
文档:您可以使用以下代码。我得到了行号为5的列名,数据从行号为8开始,在遇到空行时停止
import csv,pandas as pd
Space_encounter_linenum_flag=0
index_df=-1
#This flag is set when it encounters first blank line after the data values end
with open("C:/Users/user/PycharmProjects/spacysample/MrX.csv", 'r') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
for row in csvreader:
index_df=index_df+1
if csvreader.line_num==5:
#To get column names
print("THE COLUMN NAMES IN LINE NUMBER 5 ARE...........")
print(', '.join(row))
df_col=pd.DataFrame(row)
if csvreader.line_num==8:
#To get data values
print("**********************************************************")
print("THE DATA VALUES STARTING FROM LINE NUMBER 8 ARE...........")
while row[-1] is '':
row.pop()
print(', '.join(row))
df_col.append(row)
if (csvreader.line_num>8) and max(row, key=len)=='':
#set flag when blank line is encountered
Space_encounter_linenum_flag=1
if (csvreader.line_num>8 and row is not '') and (row is not '') and Space_encounter_linenum_flag!=1:
#stop where blank line is encountered
while row[-1] is '':
row.pop()
print(', '.join(row))
df_val=pd.DataFrame(row)
df_col.append(df_val)
if (csvreader.line_num>8) and Space_encounter_linenum_flag==1:
print('Loop breaks at, line number: '+str(csvreader.line_num))
break
希望这正是您想要的。但这并不能消除我的数据下面数千行空白和不可用的行。@TinyMuffin检查我的答案,如果不起作用,请告诉我。学习愉快!嗯,我得到了一些奇怪的结果。结果从一个空行开始,然后从第521行开始打印,直到结束。它还在每一行的末尾追加大约50个空白值。这绝对比我做过的任何事情都要近。另外,您将如何将结果保存到数据帧以供进一步分析?很抱歉,应该在顶部指定。CSV中的列数和数据值相等。另外,如果可能的话,你能分享你的CSV数据样本吗?我不完全确定你的意思,但是我需要的部分中的列数不会改变,如果你是这个意思的话。在我的数据下面我不需要的部分将列数增加大约8。还有一个页脚占据了惊人的230列。如果你问它是否是一个完美的方形数据帧(即40x40,500x500),它不是。大约有21列,下面有数千个数据点。Ok。已更新代码以删除尾部空白值。看看,太好了!我相信它正是我现在需要的!非常感谢你!
import csv,pandas as pd
Space_encounter_linenum_flag=0
index_df=-1
#This flag is set when it encounters first blank line after the data values end
with open("C:/Users/user/PycharmProjects/spacysample/MrX.csv", 'r') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
for row in csvreader:
index_df=index_df+1
if csvreader.line_num==5:
#To get column names
print("THE COLUMN NAMES IN LINE NUMBER 5 ARE...........")
print(', '.join(row))
df_col=pd.DataFrame(row)
if csvreader.line_num==8:
#To get data values
print("**********************************************************")
print("THE DATA VALUES STARTING FROM LINE NUMBER 8 ARE...........")
while row[-1] is '':
row.pop()
print(', '.join(row))
df_col.append(row)
if (csvreader.line_num>8) and max(row, key=len)=='':
#set flag when blank line is encountered
Space_encounter_linenum_flag=1
if (csvreader.line_num>8 and row is not '') and (row is not '') and Space_encounter_linenum_flag!=1:
#stop where blank line is encountered
while row[-1] is '':
row.pop()
print(', '.join(row))
df_val=pd.DataFrame(row)
df_col.append(df_val)
if (csvreader.line_num>8) and Space_encounter_linenum_flag==1:
print('Loop breaks at, line number: '+str(csvreader.line_num))
break