python - 将多个 CSV 文件读入 Python Pandas Dataframe

标签 python pandas

问题背后的一般用例是将多个 CSV 日志文件从目标目录读取到单个 Python Pandas DataFrame 中,以进行快速周转统计分析和制图。使用 Pandas 与 MySQL 的想法是全天定期执行此数据导入或附加 + 统计分析。

下面的脚本尝试将所有 CSV(相同文件布局)文件读取到单个 Pandas 数据框中,并添加与每个读取文件关联的年份列。

脚本的问题是它现在只读取目录中的最后一个文件,而不是期望的结果是目标目录中的所有 文件。

# Assemble all of the data files into a single DataFrame & add a year field
# 2010 is the last available year
years = range(1880, 2011)

for year in years:
    path ='C:\\Documents and Settings\\Foo\\My Documents\\pydata-book\\pydata-book-master`\\ch02\\names\\yob%d.txt' % year
    frame = pd.read_csv(path, names=columns)

    frame['year'] = year
    pieces.append(frame)

# Concatenates everything into a single Dataframe
names = pd.concat(pieces, ignore_index=True)

# Expected row total should be 1690784
names
<class 'pandas.core.frame.DataFrame'>
Int64Index: 33838 entries, 0 to 33837
Data columns:
name      33838  non-null values
sex       33838  non-null values
births    33838  non-null values
year      33838  non-null values
dtypes: int64(2), object(2)

# Start aggregating the data at the year & gender level using groupby or pivot
total_births = names.pivot_table('births', rows='year', cols='sex', aggfunc=sum)
# Prints pivot table
total_births.tail()

Out[35]:
sex     F   M
year        
2010    1759010     1898382

最佳答案

DataFrame 实例上的append 方法与列表实例上的append 方法的功能不同。 Dataframe.append() 不会就地发生,而是返回一个新对象。

years = range(1880, 2011)

names = pd.DataFrame()
for year in years:
    path ='C:\\Documents and Settings\\Foo\\My Documents\\pydata-book\\pydata-book-master`\\ch02\\names\\yob%d.txt' % year
    frame = pd.read_csv(path, names=columns)

    frame['year'] = year
    names = names.append(frame, ignore_index=True)

或者你可以使用concat:

years = range(1880, 2011)

names = pd.DataFrame()
for year in years:
    path ='C:\\Documents and Settings\\Foo\\My Documents\\pydata-book\\pydata-book-master`\\ch02\\names\\yob%d.txt' % year
    frame = pd.read_csv(path, names=columns)

    frame['year'] = year
    names = pd.concat(names, frame, ignore_index=True)

关于python - 将多个 CSV 文件读入 Python Pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15843123/

相关文章:

python - Pandas 在另一个系列的一个系列中找到 super 字符串

python - 不使用特殊字符在python中加密和解密

python - 使用字典查找方式访问 numpy,但保留 numpy 数组操作

pandas - 使用 pandas 进行空间分析的有效方法

python - Pandas :使用应用进行复杂过滤

python - 慢循环python在python中的另一个数据框中搜索数据

python - Pandas dataframe.dot 划分方法

python - 在 python 中打印一个字符串,用偏移量左对齐

python - 如何更正用于比较包含按键的两个字符串的算法?

Python urllib2 无法在备用端口(不是 80)上打开本地主机?错误 10013