Sujet : Re: help: pandas and 2d table
De : mats (at) *nospam* wichmann.us (Mats Wichmann)
Groupes : comp.lang.pythonDate : 13. Apr 2024, 18:07:37
Autres entêtes
Message-ID : <mailman.103.1713028072.3468.python-list@python.org>
References : 1 2 3 4
User-Agent : Mozilla Thunderbird
On 4/13/24 07:00, jak via Python-list wrote:
Stefan Ram ha scritto:
jak <nospam@please.ty> wrote or quoted:
Would you show me the path, please?
>
I was not able to read xls here, so I used csv instead; Warning:
the script will overwrite file "file_20240412201813_tmp_DML.csv"!
>
import pandas as pd
>
with open( 'file_20240412201813_tmp_DML.csv', 'w' )as out:
print( '''obj,foo1,foo2,foo3,foo4,foo5,foo6
foo1,aa,ab,zz,ad,ae,af
foo2,ba,bb,bc,bd,zz,bf
foo3,ca,zz,cc,cd,ce,zz
foo4,da,db,dc,dd,de,df
foo5,ea,eb,ec,zz,ee,ef
foo6,fa,fb,fc,fd,fe,ff''', file=out )
>
df = pd.read_csv( 'file_20240412201813_tmp_DML.csv' )
>
result = {}
>
for rownum, row in df.iterrows():
iterator = row.items()
_, rowname = next( iterator )
for colname, value in iterator:
if value not in result: result[ value ]= []
result[ value ].append( ( rowname, colname ))
>
print( result )
>
In reality what I wanted to achieve was this:
what = 'zz'
result = {what: []}
for rownum, row in df.iterrows():
iterator = row.items()
_, rowname = next(iterator)
for colname, value in iterator:
if value == what:
result[what] += [(rowname, colname)]
print(result)
In any case, thank you again for pointing me in the right direction. I
had lost myself looking for a pandas method that would do this in a
single shot or almost.
doesn't Pandas have a "where" method that can do this kind of thing? Or doesn't it match what you are looking for? Pretty sure numpy does, but that's a lot to bring in if you don't need the rest of numpy.