【问题标题】:Creating a single dataframe by merging multiple CSVs from the same folder通过合并来自同一文件夹的多个 CSV 创建单个数据框
【发布时间】:2018-10-07 06:06:35
【问题描述】:
files = [f for f in os.listdir('.') if os.path.isfile(f)]

listdf = []

for f in files:

    filename, ext = os.path.splitext(f)

    if ext == '.csv':

        listdf.append(filename)

        filename = pd.read_csv(filename + '.csv', index_col='responseid')

listdf

interim_df = reduce(lambda x, y: pd.merge(x, y, on='responseid'), listdf)

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\rpy2-2.9.4-py3.6-win-amd64.egg\rpy2\robjects\pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.

  res = PandasDataFrame.from_items(items)
       ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-18-71b6f0ea0884> in <module>
 55 listdf
 56 
--->     57 interim_df = reduce(lambda x, y: pd.merge(x, y, on='responseid'), listdf)

   in <lambda>(x, y)
 55 listdf
 56 
---> 57 interim_df = reduce(lambda x, y: pd.merge(x, y, on='responseid'), listdf)

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pandas\core\reshape\merge.py in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
 59                          right_index=right_index, sort=sort, suffixes=suffixes,
 60                          copy=copy, indicator=indicator,
---> 61                          validate=validate)
 62     return op.get_result()
 63 

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pandas\core\reshape\merge.py in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator, validate)
522         if not isinstance(left, DataFrame):
523             raise ValueError('can not merge DataFrame with instance of '
--> 524                              'type {left}'.format(left=type(left)))
525         if not isinstance(right, DataFrame):
526             raise ValueError('can not merge DataFrame with instance of '

ValueError:无法将 DataFrame 与

类型的实例合并

【问题讨论】:

  • ValueError: 无法将 DataFrame 与 类型的实例合并
  • 你所有的 csv;s 都有相同的列?
  • 不,它们有不同的列名,除了索引是'responseid'
  • df=pd.concat([pd.read_csv(file) for file in os.listdir('.') if file.endswith('.csv')]) df.set_index('responseid ',inplace=True)

标签: pandas dataframe merge


【解决方案1】:
df=pd.concat([pd.read_csv(file) for file in os.listdir('.') if file.endswith('.csv')]) 
df.set_index('responseid',inplace=True) 

【讨论】:

  • 我很抱歉之前没有说清楚。这里的每个数据框都有不同的行数,所以我想知道 concat 是否会有所帮助。
  • 发布两个不同形状的样本df及其预期输出
猜你喜欢
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 2018-05-09
  • 2019-08-26
  • 2020-04-20
  • 2017-04-01
相关资源
最近更新 更多