基于dataframepython的文件排序
我想清理一个包含基于dataframepython的文件排序,python,pandas,csv,Python,Pandas,Csv,我想清理一个包含csv文件的文件夹,但数据帧之间存在差异 第一个块具有以下内容: Province/State,Country/Region,Last Update,Confirmed,Deaths,Recovered Anhui,Mainland China,1/22/2020 17:00,1,, Beijing,Mainland China,1/22/2020 17:00,14,, Chongqing,Mainland China,1/22/2020 17:00,6,, FIPS,Admi
csv
文件的文件夹,但数据帧之间存在差异
第一个块具有以下内容:
Province/State,Country/Region,Last Update,Confirmed,Deaths,Recovered
Anhui,Mainland China,1/22/2020 17:00,1,,
Beijing,Mainland China,1/22/2020 17:00,14,,
Chongqing,Mainland China,1/22/2020 17:00,6,,
FIPS,Admin2,Province_State,Country_Region,Last_Update,Lat,Long_,Confirmed,Deaths,Recovered,Active,Combined_Key
45001,Abbeville,South Carolina,US,2020-03-23 23:19:34,34.22333378,-82.46170658,1,0,0,0,"Abbeville, South Carolina, US"
22001,Acadia,Louisiana,US,2020-03-23 23:19:34,30.295064899999996,-92.41419698,1,0,0,0,"Acadia, Louisiana, US"
51001,Accomack,Virginia,US,2020-03-23 23:19:34,37.76707161,-75.63234615,1,0,0,0,"Accomack, Virginia, US"
第二个块具有以下内容:
Province/State,Country/Region,Last Update,Confirmed,Deaths,Recovered
Anhui,Mainland China,1/22/2020 17:00,1,,
Beijing,Mainland China,1/22/2020 17:00,14,,
Chongqing,Mainland China,1/22/2020 17:00,6,,
FIPS,Admin2,Province_State,Country_Region,Last_Update,Lat,Long_,Confirmed,Deaths,Recovered,Active,Combined_Key
45001,Abbeville,South Carolina,US,2020-03-23 23:19:34,34.22333378,-82.46170658,1,0,0,0,"Abbeville, South Carolina, US"
22001,Acadia,Louisiana,US,2020-03-23 23:19:34,30.295064899999996,-92.41419698,1,0,0,0,"Acadia, Louisiana, US"
51001,Accomack,Virginia,US,2020-03-23 23:19:34,37.76707161,-75.63234615,1,0,0,0,"Accomack, Virginia, US"
我正在尝试将它们全部清理为以下格式:
0,County,State,Country,Confirmed,Deaths,Recovered,Active,City
0,Abbeville,South Carolina,US,3,0,0,0,"Abbeville, South Carolina, US"
1,Acadia,Louisiana,US,9,1,0,0,"Acadia, Louisiana, US"
2,Accomack,Virginia,US,3,0,0,0,"Accomack, Virginia, US"
我的问题是,有没有一种方法可以根据数据帧中的差异进行排序,或者我总是需要找到文件的变化位置,然后根据这些变化进行排序
我尝试了以下方法,01-22-2020.csv是第一个参考:
from glob import glob
# files = glob('*.csv')
samples = []
references = []
ref = str(input('Enter first reference name: '))
num_ref = int(input('How many references are there? '))
all_files = glob('*.csv')
first_ref = all_files.index(ref)
ref_files = all_files[first_ref:first_ref+num_ref]
sample_files = all_files
del sample_files[first_ref:first_ref+num_ref]
del all_files
结果是:
ValueError: '01-22-2020.csv' is not in list
下面是另一种尝试:
files = glob('*.csv')
for f in files:
df = pd.read_csv(f)
df = df.replace(np.nan, 'Other', regex=True)
if df.columns[0] == ['FIPS']:
df = df.drop(['FIPS', 'Last_Update', 'Lat', 'Long_'], axis=1)
df = df.rename(columns={'Admin2': 'County',
'Province_State': 'State',
'Country_Region': 'Country',
'Combined_Key': 'City'})
df.to_csv(f)
elif df.columns[0] != ['FIPS']:
df = df.drop(['Last Update'], axis=1)
df = df.rename(columns={'Province/State': 'State',
'Country/Region': 'Country'})
df.to_csv(f)
else:
pass
其结果是:
KeyError: "['Last Update'] not found in axis"
我会先用Python加载文件,然后将它们分割成不同的文件。例如,根据第一个字符是否为数字 熊猫无法区分同一CSV文件中不同样式的行。而不是
df = df.drop('Last Update')
使用
(请注意下划线符号
。我认为检查第一个列名的if语句就足够了,但它似乎不行。(编辑OP以反映这一点)这是一个我正在向其中添加更多文件的文件夹,如果数据帧发生更改,我必须添加新代码并注释掉其他代码。如果df.columns[0]
,请尝试if df.columns[0]
。KeyError:“['Last Update']not found in axis”
现在是我的新错误。请执行打印(df.columns)
在if语句之后,您将看到您正在使用的内容。我正在使用第一个文件,第一列为['Province/Sate']。这确实有未找到的['Last Update']。第一个子集有它作为Last Update
,而第二个子集有它作为Last\u Update
由glob('*.csv')
返回的文件的假定顺序显然不正确-请尝试打印(文件)
。在第一种方法中,当前目录不包含输入的文件。顺便说一句,将str
应用于input()
是多余的,您可以忽略它,因为input()
返回一个字符串。if语句应该处理第二个子集,而elif应该处理第一个子集。在我看来,文件的顺序并不重要。如果第一列是FIPS,则执行此操作,如果不是,则执行该操作。我已经试过你的建议,结果也一样KeyError:“['Last_Update']未在axis中找到”
对于第一种方法,为什么sorted(glob
返回与现在相同的结果?