Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于dataframepython的文件排序_Python_Pandas_Csv - Fatal编程技术网

基于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
返回与现在相同的结果?