Python:清除csv文件中不匹配的数据
我是编程新手。我正在尝试清理csv文件中的数据,以便进一步扩展项目。作为输入提供的csv文件非常混乱,我只需要它的特定部分 输入文件如下: 所需格式: 到目前为止,我正在尝试提取“观察模式”、“LON”和“LAT”的值,但我不确定如何附加后面的值。 这就是我迄今为止所尝试的:Python:清除csv文件中不匹配的数据,python,pandas,csv,Python,Pandas,Csv,我是编程新手。我正在尝试清理csv文件中的数据,以便进一步扩展项目。作为输入提供的csv文件非常混乱,我只需要它的特定部分 输入文件如下: 所需格式: 到目前为止,我正在尝试提取“观察模式”、“LON”和“LAT”的值,但我不确定如何附加后面的值。 这就是我迄今为止所尝试的: import csv import re file = csv.reader(open('1mvn_kp_iuvs_2018_01_r01.tab.csv','r')) mode = [] lat = [] for r
import csv
import re
file = csv.reader(open('1mvn_kp_iuvs_2018_01_r01.tab.csv','r'))
mode = []
lat = []
for row in file:
for values in row:
if 'OBSERVATION_MODE' in values:
print("\n")
mode.append(row)
if re.search('LAT', values):
lat.append(row)
print(mode)
print(lat)
我很确定我试图研究的逻辑是毫无用处的。有人能给我一个更好的概述吗?我也尝试过在线搜索,但是当行和列都不匹配时,我发现没有任何东西可以清理数据。感谢您的帮助
多谢各位
链接到inut csv文件,预期输出为
请注意,预期的输出'Cleaned_sample.xlsx'是我手动生成的,我希望使用python编程获得类似的输出。您应该尝试使用pandas中的函数。有多种关键字,如header、skiprows或usecols,允许您设置数据在文件中的起始位置、跳过多行、仅使用特定列等。。。返回的对象类似于数组,您可以轻松访问数据
基于您提供的文件的示例:
data = pandas.read_csv(path_to_file, skiprows=44, skipfooter=378, engine='python', dtype='float')
此调用将读取文件中的第一组数据。要访问“海拔高度”列中的第五个值,您可以执行以下操作:
data['ALTITUDE'][4]
然后,您必须使用一个类似的read_csv调用,使用不同的skiprows和skipfooter值来访问其他数据集。一旦您拥有了所有数据,从numpy调用concatenate应该允许您将所有数据作为一个数组。小心标题
请注意,可以在skiprows中使用lambda表达式,如果您找到一个模式可以用来指定不需要的行,则可能只允许您调用read_csv()一次。试试这个
import pandas as pd
df1=pd.read_csv('1mvn_kp_iuvs_2018_01_r01.tab (1).csv',header=None,nrows=18)
dic=df1.set_index(0)[2].to_dict()
for u,v in dic.items():
dic[u]=[v]
df1= pd.DataFrame(dic)
df2=pd.read_csv('1mvn_kp_iuvs_2018_01_r01.tab (1).csv',skiprows=19)
df1 = pd.concat([df1]*len(df2),ignore_index=True)
df3=pd.concat([df1,df2],axis=1)
print df3.head()
注意:我已经从原始文件中删除了几行,以使您的示例之间完全相同
输入:
输出:
LAT LAT_MSO LOCAL_TIME LON LON_MSO MARS_SEASON_LS \
0 -19.512522 NaN 8.083779 6.757075 NaN 108.81089
1 -19.512522 NaN 8.083779 6.757075 NaN 108.81089
2 -19.512522 NaN 8.083779 6.757075 NaN 108.81089
3 -19.512522 NaN 8.083779 6.757075 NaN 108.81089
4 -19.512522 NaN 8.083779 6.757075 NaN 108.81089
MARS_SUN_DIST ORBIT_NUMBER SC_ALT SC_GEO_LAT ... \
0 1.630965 6330.0 203.680405 -17.815445 ...
1 1.630965 6330.0 203.680405 -17.815445 ...
2 1.630965 6330.0 203.680405 -17.815445 ...
3 1.630965 6330.0 203.680405 -17.815445 ...
4 1.630965 6330.0 203.680405 -17.815445 ...
SUBSOL_GEO_LON SZA ALTITUDE CO2 CO2+ O \
0 65.4571 71.790688 80 -9999999000 -9999999000 -9999999000
1 65.4571 71.790688 90 -9999999000 -9999999000 -9999999000
2 65.4571 71.790688 100 -9999999000 -9999999000 -9999999000
3 65.4571 71.790688 110 -9999999000 -9999999000 -9999999000
4 65.4571 71.790688 120 -9999999000 -9999999000 551467460
N2 C N H
0 -9999999000 -9999999000 -9999999000 -9999999000
1 -9999999000 -9999999000 -9999999000 -9999999000
2 -9999999000 -9999999000 -9999999000 -9999999000
3 -9999999000 -9999999000 -9999999000 -9999999000
4 710188930 -9999999000 -9999999000 -9999999000
现在是否可见?是的,但最好不要共享图像。而是像代码格式一样共享。我在提交时尝试将其作为代码格式共享,但什么都看不见,所以将其编辑为images@P.Saini-是否要删除文件中的元数据?我的意思是你只想从海拔高度,二氧化碳,二氧化碳+?实际上,我想把LON,LAT和观测模式的值附加到海拔高度,CO0,CO2+,的值上,。。。。等等