我试图创建一个表(在LaTex中打印),其中包含给定DataFrame的所有不同值:
$job = Start-Job { # Do stuff }
$job.StopJob()
我有以下错误消息:
dfDiff = pd.DataFrame(columns=df2.columns)
for col in df2:
dfDiff[col]=(df2[col].unique())
有更好的方法吗?
答案 0 :(得分:0)
好的,您的目标似乎是让第二个DataFrame具有相同的列数和名称,其中每列包含初始DataFrame的唯一值。我不知道这是否是最佳方式,所以我会告诉你我是如何按照你的方式做的,然后提出另一种方法来很好地打印它。
如上所述,您获得的错误是因为您尝试使用不同长度的列创建DataFrame。如果您在"空"中使用NaN值,那么您可以通过一些操作来完成此操作。细胞。我会像这样接近它:
最后,将NaN值替换为实际值,然后打印DF。
import pandas as pd
colNames = df2.columns.tolist()
uniqueValsList = []
for each in colNames:
uniqueVals = list(df2[each].unique())
uniqueValsList.append(pd.Series(data=uniqueVals,name=each))
maxlen = 0
for each in uniqueValsList:
if len(each) > maxlen:
maxlen = len(each)
fillerData = np.empty((maxlen,len(colNames),))
dfDiff = pd.DataFrame(columns=colNames,data=fillerData)
for i in range(len(uniqueValsList)):
dfDiff[colNames[i]] = uniqueValsList[i]
dfDiff
这将允许您使用您的唯一值打印出DF,但是对于所有NaN值,它看起来很奇怪。我建议使用HTML和tabulate
模块,就像this answer一样。例如:
from IPython.display import HTML, display
import tabulate
listOfLists = []
for i in range(len(uniqueValsList)):
thisList = []
thisList.append(colNames[i])
for each in uniqueValsList[i].tolist():
thisList.append(each)
listOfList.append(thisList)
display(HTML(tabulate.tabulate(listOfLists, tablefmt='html')
我不熟悉Jupyter笔记本中的LaTeX,所以如果您找到了更好的方法,我有兴趣知道!我尝试弄乱tablefmt
电话中的display(HTML())
值,但无济于事。
答案 1 :(得分:-1)
如果输入 = ["cc","ba","aa",此函数将采用一个填充有多个变量的数组(可能会重复多次)并返回一个只有唯一变量的数组 par example ,"aa","ab","ab"] 输出将是 ["cc","ba","aa","ab"]
> def unique(tu):
> t=tu
> i=0
> while i< len(t) :
> test=0
> for j in range(len(tu)):
> if t[i]==tu[j]:
> test+=1
> if test > 1:
> for k in range(test-1) :
> del t[i+k]
> i-=1
> i+=1
>
> return t
> yy=["bb","ba","aa","aa","aa","ab","ab"] ul=unique(yy)
> for i in range(len(ul)):
> print(ul[i])