我正在尝试使用 pandas 将一个大的 tab/txt(大小 = 3 gb)文件导入 Python pd.read_csv("file.txt",sep="\t")
。我加载的文件是一个“.tab”文件,我将其扩展名更改为“.txt”以将其导入read_csv()
。它是一个包含 305 列和 +/- 1 000 000 行的文件。
当我执行代码时,一段时间后 Python 返回一个 MemoryError。我搜索了一些信息,这基本上意味着没有足够的可用 RAM。当我指定nrows = 20
的read_csv()
它工作正常。
我使用的计算机有 46gb 的 RAM,其中大约 20gb 可用于 Python。
我的问题:3gb 的文件怎么可能需要超过 20gb 的 RAM 才能使用 pandas 导入 Python read_csv()
?我做错了什么吗?
编辑:在执行df.dtypes
该类型的混合object
,float64
以及int64
更新:我使用以下代码来解决这个问题并执行我的计算:
summed_cols=pd.DataFrame(columns=["sample","read sum"])
while x<352:
x=x+1
sample_col=pd.read_csv("file.txt",sep="\t",usecols=[x])
summed_cols=summed_cols.append(pd.DataFrame({"sample":[sample_col.columns[0]],"read sum":sum(sample_col[sample_col.columns[0]])}))
del sample_col
Run Code Online (Sandbox Code Playgroud)
它现在选择一列,执行计算,将结果存储在数据框中,删除当前列,然后移动到下一列
我有以下简单的示例数据框:
import pandas as pd
data = [['Alex',25],['Bob',34],['Sofia',26],["Claire",35]]
df = pd.DataFrame(data,columns=['Name','Age'])
df["sex"]=["male","male","female","female"]
Run Code Online (Sandbox Code Playgroud)
我使用以下代码来绘制条形图:
import matplotlib.pyplot as plt
import seaborn as sns
age_plot=sns.barplot(data=df,x="Name",y="Age", hue="sex",dodge=False)
age_plot.get_legend().remove()
plt.setp(age_plot.get_xticklabels(), rotation=90)
plt.ylim(0,40)
age_plot.tick_params(labelsize=14)
age_plot.set_ylabel("Age",fontsize=15)
age_plot.set_xlabel("",fontsize=1)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)
产生以下条形图:
我的问题:如何控制条之间的空白?我想要在男性(蓝色)和女性(橙色)条之间有一些额外的空白。
输出应该如下所示(在 中编辑得不好MS PPT
):
我已经找到了几个关于此的主题matplotplib
(例如https://python-graph-gallery.com/5-control-width-and-space-in-barplots/),但没有找到seaborn
. 我更喜欢使用,seaborn
因为它具有简单的着色功能hue
。
谢谢。