我有一只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对象是什么以及如何使用它.
我有一些Pandas DataFrames共享相同的值规模,但具有不同的列和索引.在调用时df.plot(),我会获得单独的绘图图像.我真正想要的是将它们全部放在与次要情节相同的情节中,但遗憾的是我没有想出一个如何并且非常欣赏一些帮助的解决方案.
我想从目录中读取几个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) 我想从目标目录中读取多个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) 我正在尝试使用此代码并排绘制两个分布图
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 返回不同类型的输出,我该怎么做才能在同一行上输出两个图?
我的路径中有很多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 的消耗时间相似。
或者还有其他方法来减少连接时间。
当我们有多个 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(不推荐使用)对象有效”
有人可以帮忙吗?
我正在尝试将多个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版本上运行可以提供正确的列名: …
我将多个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)
是否有其他软件包更好的解决方案?
这需要很多时间。
谢谢
我有多个数据框,我想将它们绘制在分组条形图视图中的同一个图形上。
这是两个非常小的数据框,我想将它们绘制在同一张图中。
数据框是:

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

我尝试这样做,只绘制一张图:
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)
结果只是图片中单个数据帧的数据,而不是两个数据帧的两个数据。请注意,只有两个数据帧的标题出现在同一张图片中,数据仅来自单个独立的数据帧。

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