相关疑难解决方法(0)

如何迭代Pandas中的DataFrame中的行?

我有一只DataFrame熊猫:

import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df
Run Code Online (Sandbox Code Playgroud)

输出:

   c1   c2
0  10  100
1  11  110
2  12  120
Run Code Online (Sandbox Code Playgroud)

现在我想迭代这个帧的行.对于每一行,我希望能够通过列的名称访问其元素(单元格中的值).例如:

for row in df.rows:
   print row['c1'], row['c2']
Run Code Online (Sandbox Code Playgroud)

是否有可能在熊猫中做到这一点?

我发现了类似的问题.但它没有给我我需要的答案.例如,建议使用:

for date, row in df.T.iteritems():
Run Code Online (Sandbox Code Playgroud)

要么

for row in df.iterrows():
Run Code Online (Sandbox Code Playgroud)

但我不明白row对象是什么以及如何使用它.

python rows dataframe pandas

1551
推荐指数
28
解决办法
199万
查看次数

如何将单独的Pan​​das DataFrames绘制为子图?

我有一些Pandas DataFrames共享相同的值规模,但具有不同的列和索引.在调用时df.plot(),我会获得单独的绘图图像.我真正想要的是将它们全部放在与次要情节相同的情节中,但遗憾的是我没有想出一个如何并且非常欣赏一些帮助的解决方案.

python matplotlib pandas

97
推荐指数
6
解决办法
13万
查看次数

将多个excel文件导入python pandas并将它们连接成一个数据帧

我想从目录中读取几个excel文件到pandas并将它们连接成一个大数据帧.我虽然无法弄明白.我需要一些关于for循环的帮助并构建一个连接的数据帧:这是我到目前为止所拥有的:

import sys
import csv
import glob
import pandas as pd

# get data file names
path =r'C:\DRO\DCL_rawdata_files\excelfiles'
filenames = glob.glob(path + "/*.xlsx")

dfs = []

for df in dfs: 
    xl_file = pd.ExcelFile(filenames)
    df=xl_file.parse('Sheet1')
    dfs.concat(df, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

python excel concatenation pandas

16
推荐指数
4
解决办法
5万
查看次数

Pandas:使用循环和分层索引将多个csv文件导入数据框

我想从目标目录中读取多个CSV文件(具有不同数量的列)到单个Python Pandas DataFrame中,以便有效地搜索和提取数据.

示例文件:

Events 
1,0.32,0.20,0.67
2,0.94,0.19,0.14,0.21,0.94
3,0.32,0.20,0.64,0.32
4,0.87,0.13,0.61,0.54,0.25,0.43 
5,0.62,0.21,0.77,0.44,0.16
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

# get a list of all csv files in target directory
my_dir = "C:\\Data\\"
filelist = []
os.chdir( my_dir )
for files in glob.glob( "*.csv" ) :
    filelist.append(files)

# read each csv file into single dataframe and add a filename reference column 
# (i.e. file1, file2, file 3) for each file read
df = pd.DataFrame()
columns = range(1,100)
for c, f in enumerate(filelist) :
    key = "file%i" % c …
Run Code Online (Sandbox Code Playgroud)

python csv hierarchical-data pandas

11
推荐指数
1
解决办法
2万
查看次数

seaborn 未在定义的子图中绘制

我正在尝试使用此代码并排绘制两个分布图

fig,(ax1,ax2) = plt.subplots(1,2)

sns.displot(x =X_train['Age'], hue=y_train, ax=ax1)
sns.displot(x =X_train['Fare'], hue=y_train, ax=ax2)
Run Code Online (Sandbox Code Playgroud)

它返回以下结果(两个空的子图,后跟一个分布在两行上的图)-

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

如果我用 violinplot 尝试相同的代码,它会按预期返回结果

fig,(ax1,ax2) = plt.subplots(1,2)

sns.violinplot(y_train, X_train['Age'], ax=ax1)
sns.violinplot(y_train, X_train['Fare'], ax=ax2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

为什么 displot 返回不同类型的输出,我该怎么做才能在同一行上输出两个图?

python data-visualization seaborn

10
推荐指数
1
解决办法
5567
查看次数

python - 如何正确使用 asyncio 并使用 pandas 读取 csv

我的路径中有很多csv文件,我希望使用pandas read_csv来读取,然后使用pandas.concat合并所有返回的dataframe,

但我认为我没有正确使用asyncio,因为消耗的时间并没有缩短。

import asyncio
import time
import pandas as pd
import glob2
import os

async def read_csv(filename):
    df = pd.read_csv(filename, header=None)
    return df
t = time.time()
path = r'C:\LRM_STGY_REPO\IB_IN'

tasks = [asyncio.ensure_future(read_csv(i)) for i in list(glob2.iglob(os.path.join(path, "*.txt")))]

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

df = pd.concat([t.result() for t in tasks],ignore_index=True)
# print(df)
print( '%.4f' %(time.time()-t))

t = time.time()
def read_csv2(filename):
    return pd.read_csv(filename, header=None)
df = pd.concat(map(read_csv2,glob2.iglob(os.path.join(path, "*.txt"))),ignore_index=True)
# print(df)
print( '%.4f' %(time.time()-t))
Run Code Online (Sandbox Code Playgroud)

read_csv 和 read_csv2 的消耗时间相似。

或者还有其他方法来减少连接时间。

python

5
推荐指数
0
解决办法
2482
查看次数

分块读取 Pandas 中的多个 CSV 文件

当我们有多个 csv 文件并且所有 csv 的总大小约为 20gb 时,如何分块导入和读取多个 CSV?

我不想使用,Spark因为我想在 SkLearn 中使用模型,所以我想要解决方案Pandas本身。

我的代码是:

allFiles = glob.glob(os.path.join(path, "*.csv"))
df = pd.concat((pd.read_csv(f,sep=",") for f in allFiles))
df.reset_index(drop=True, inplace=True)
Run Code Online (Sandbox Code Playgroud)

但这失败了,因为我路径中所有 csv 的总大小为 17gb。

我想分块阅读它,但如果我这样尝试,我会收到一些错误:

  allFiles = glob.glob(os.path.join(path, "*.csv"))
  df = pd.concat((pd.read_csv(f,sep=",",chunksize=10000) for f in allFiles))
  df.reset_index(drop=True, inplace=True)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是这样的:

“无法连接“”类型的对象;只有 pd.Series、pd.DataFrame 和 pd.Panel(不推荐使用)对象有效”

有人可以帮忙吗?

python pandas sklearn-pandas jupyter-notebook

5
推荐指数
1
解决办法
4219
查看次数

将多个csv文件读取到Pandas数据框中

我正在尝试将多个CSV文件读取到Pandas数据框中。CSV不会以逗号分隔-字段以分号“;”分隔。

我的代码基于此处的答案。

我的数据全部在一个特定的子目录中: /data/luftdaten/5331

这是我运行的:

import glob
import pandas as pd

path =r'data/luftdaten/5331' # use your path

filenames = glob.glob(path + "/*.csv")
count_files = 0
dfs = []
for filename in filenames:
    if count_files ==0:
        dfs.append(pd.read_csv(filename, sep=";")) 
        count_files += 1
    else:
        dfs.append(pd.read_csv(filename, sep=";", skiprows=[0]))
        count_files +=1

big_frame = pd.concat(dfs, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

count_files用来监视它是否是第一个CSV-在这种情况下,我将导入标头。否则,它会跳过标题。

该代码执行确定。

如果我使用该目录中的单个文件运行它,那么一切都很好:

big_frame.info()
Run Code Online (Sandbox Code Playgroud)

输出:

RangeIndex:146个条目,0到145
数据列(**总共12列** s):
sensor_id 146非空int64
sensor_type 146非空对象
等等......

如果我在目录中有2个或更多文件来运行它,那么从一开始就会出错。

输出4个文件:

范围索引:1893个条目,0到1892
数据列(总计** 33列**):
-2.077 1164非空float64
-2.130 145非空float64
2.40 145非空float64

big_frame.head()在单个CSV版本上运行可以提供正确的列名: …

python csv dataframe pandas

4
推荐指数
1
解决办法
4677
查看次数

将一个文件夹的多个csv文件加载到一个数据帧中

我将多个csv文件保存在一个具有相同列布局的文件夹中,并希望将其作为pandas中的数据框加载到python中。

这个问题确实类似于该线程。

我正在使用以下代码:

import glob
import pandas as pd
salesdata = pd.DataFrame()
for f in glob.glob("TransactionData\Promorelevant\*.csv"):
    appenddata = pd.read_csv(f, header=None, sep=";")
    salesdata = salesdata.append(appenddata,ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

是否有其他软件包更好的解决方案?

这需要很多时间。

谢谢

python csv glob dataframe pandas

4
推荐指数
2
解决办法
3339
查看次数

如何从两个或多个数据帧绘制分组条形图

我有多个数据框,我想将它们绘制在分组条形图视图中的同一个图形上。

这是两个非常小的数据框,我想将它们绘制在同一张图中。

数据框是:

我的数据框

我想绘制一个像这样的例子的图:

我想要的例子

我尝试这样做,只绘制一张图:

fig, ax = plt.subplots()

df1.plot.bar(x='Zona',y='Total_MSP')
df4.plot.bar(x='Zona',y='NumEstCasasFavelas2017',ax=ax)

plt.show()
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个:

fig, ax = plt.subplots()

df1.plot.bar(x='Zona',y='Total_MSP',ax=ax)
df4.plot.bar(x='Zona',y='NumEstCasasFavelas2017',ax=ax)

plt.show()
Run Code Online (Sandbox Code Playgroud)

结果只是图片中单个数据帧的数据,而不是两个数据帧的两个数据。请注意,只有两个数据帧的标题出现在同一张图片中,数据仅来自单个独立的数据帧。

我的失败

python matplotlib bar-chart pandas grouped-bar-chart

4
推荐指数
1
解决办法
2万
查看次数

如何读取pandas文件夹中的所有csv文件?

每个月我都会下载 csv 格式的整个分类帐并将其保存到文件夹中。我如何在 pandas 中将其作为单个数据帧读取

directory pandas

2
推荐指数
2
解决办法
2万
查看次数