【问题标题】:Pandas name dataframe from a string in csv name来自csv名称中的字符串的熊猫名称数据框
【发布时间】:2020-07-31 18:04:15
【问题描述】:

我有几个 csv,其名称中包含一个字符串(例如城市名称),并希望在数据框中使用从该城市名称派生的名称读取它们。

csv 名称示例:data_paris.csv、data_berlin.csv

如何循环读取它们以获取 df_paris 和 df_berlin?

到目前为止我尝试了什么:

all_files = glob.glob(./*.csv")

for filename in all_files:
    city_name=re.split("[_.]", filename)[1] #to extract city name from filename
    dfname= {'df' + str(city_name)}
    print(dfname)
    dfname= pd.read_csv(filename)

我希望有 df_rome 和 df_paris,但我只得到 dfname。为什么?

一个相关问题:Name a dataframe based on csv file name?

谢谢!

【问题讨论】:

  • 而不是df_parisdf_berlin,你应该创建一个字典dfs,键是'paris''berlin',所以你可以做dfs['paris']dfs['berlin']。跨度>
  • 你能写一个更详细的答案吗?谢谢!

标签: python pandas glob


【解决方案1】:

我建议不要像df_parisdf_berlin 这样的自动动态命名。相反,您应该这样做:

all_files = glob.glob("./*.csv")

# dictionary of dataframes
dfs = dict()
for filename in all_files:
    city_name=re.split("[_.]", filename)[1] # to extract city name from filename

    dfs[city_name] =  pd.read_csv(filename) # assign to the dataframe dictionary

【讨论】:

    【解决方案2】:

    您正在混合您的概念。如果要动态引用已加载的数据帧,请使用 dict

    all_files = glob.glob("./*.csv")
    
    dfname={}
                          
    for filename in all_files:
        city_name=re.split("[_.]", filename)[1] #to extract city name from filename
        dfname['df' + str(city_name)] = pd.read_csv(filename)
    print(list(dfname.keys())
    
    

    【讨论】:

    • 我看不到你指的是什么......你用dict和理解做了多少编码?然后,您始终可以将加载的 df 引用为dfname["dfparis"]print() 的重点是展示这一点。你知道dict 是键/值对的动态结构吗?
    • 是的,我知道字典!我只是还没有使用/看到数据框作为字典。
    【解决方案3】:

    您创建的唯一数据框是“dfname”。每次循环时,您只需不断覆盖它。我想你可以使用 globals() 来做到这一点,但老实说,我可能只是创建一个列表或数据框的字典(因为在我输入这个时似乎其他人已经建议了),或者为“城市”创建一个命名列在我不断附加的主数据框中。但是,根据您的具体要求,您可能可以这样做:

    all_files = glob.glob("./*.csv")
    
    for filename in all_files:
        globals()[filename[5:-4]]=  pd.read_csv(filename)
    

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 2019-09-30
      • 2021-07-06
      相关资源
      最近更新 更多