我有大约600个csv文件数据集,它们都有相同的列名['DateTime','Actual','Consensus','Previous','Revised'],所有经济指标和所有时间序列数据集
目标是将它们合并在一个csv文件中。
以'DateTime'作为索引。
我想要将此文件编入索引的方式是时间线方式,这意味着让我们说第一个csv中的第一个事件发布在12/18/2017 10:00:00,第一个事件发生在第二个csv中的日期为12 / 29/2017 2017:00 09:00和第三次csv的第一次活动日期为12/20/2017 09:00:00。
所以,我希望将它们编入索引后面的第一个和更新的一个,等等,尽管源csv来自它。
我试图合并其中只有3个作为实验而问题是'DateTime',因为它会像这样将它们中的3个打印在一起(' 12/18/2017 10:00:00' ,' 12/29/2017 09:00:00',' 12/20/2017 09:00:00') 这是代码:
json-to-xml
答案 0 :(得分:6)
考虑使用read_csv()
args, index_col 和 parse_dates ,在导入期间创建索引并将其格式化为datetime。然后运行所需的水平合并。下面假设日期在csv的第一列。最后在最终数据帧上使用sort_index()
来对日期时间进行排序。
df1 = pd.read_csv(r"E:\Business\Economic Indicators\Consumer Price Index - Core (YoY) - European Monetary Union.csv",
index_col=[0], parse_dates=[0])
df2 = pd.read_csv(r"E:\Business\Economic Indicators\Private loans (YoY) - European Monetary Union.csv",
index_col=[0], parse_dates=[0])
df3 = pd.read_csv(r"E:\Business\Economic Indicators\Current Account s.a - European Monetary Union.csv",
index_col=[0], parse_dates=[0])
finaldf = pd.concat([df1, df2, df3], axis=1, join='inner').sort_index()
对于DRY-er方法,特别是在数百个csv文件中,使用列表理解
import os
...
os.chdir('E:\\Business\\Economic Indicators')
dfs = [pd.read_csv(f, index_col=[0], parse_dates=[0])
for f in os.listdir(os.getcwd()) if f.endswith('csv')]
finaldf = pd.concat(dfs, axis=1, join='inner').sort_index()
答案 1 :(得分:2)
您正在尝试从许多数据框的行中构建一个大型数据框,这些数据框都具有相同的列名。 axis
应为0(默认值),而不是1.此外,您不需要指定连接类型。这将没有任何效果,因为每个数据帧的列名都相同。
df = pd.concat([df1, df2, df3])
应该足以连接数据集。
(见https://pandas.pydata.org/pandas-docs/stable/merging.html)
您对set_index
的调用使用DateTime列中的值来定义索引应该可以正常工作。
答案 2 :(得分:0)
问题有两个:将csv合并到一个数据帧中,然后按日期排序。
正如约翰史密斯指出要沿行合并数据帧,你需要使用:
df = pd.concat([df1,df2,df3])
然后,您要根据索引设置索引并重新排序数据帧。
df.set_index('DateTime', inplace=True)
df.sort_index(inplace=True)
或按降序排列
df.sort_index(inplace=True,ascending=False)
(见https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html)
timeindex = pd.date_range('2018/01/01','2018/01/10')
randtimeindex = np.random.permutation(timeindex)
# Create three dataframes
df1 = pd.DataFrame(index=range(3),data=np.random.rand(3,3),
columns=['Actual','Consensus','DateTime'])
df1.DateTime=randtimeindex[:3]
df2 = pd.DataFrame(index=range(3),data=np.random.rand(3,3),
columns=['Actual','Consensus','DateTime'])
df2.DateTime=randtimeindex[3:6]
df3 = pd.DataFrame(index=range(4),data=np.random.rand(4,3),
columns=['Actual','Consensus','DateTime'])
df3.DateTime=randtimeindex[6:]
# Merge them
df4 = pd.concat([df1, df2, df3], axis=0)
# Reindex the merged dataframe, and sort it
df4.set_index('DateTime', inplace=True)
df4.sort_index(inplace=True, ascending=False)
print(df4.head())
答案 3 :(得分:0)
macOS