文字のセットを受け取り、それらを使用して作成できるさまざまな数の単語を出力するコードを作成しようとしています。
これまでの私のコードは次のとおりです。
import itertools as itr
import requests
from PyDictionary import PyDictionary
import pandas as pd
x=list(input("enter letters given:"))
n=len(x)
dframe=pd.DataFrame()
dictionary=PyDictionary()
for i in range(2,n+1,1):
combinations=list(itr.combinations_with_replacement(x,i))
format_combinations=[]
for letters in combinations:
format_combinations.append(' '.join(letters))
for idx,word in enumerate(format_combinations):
word=word.replace(" ","")
format_combinations[idx]=word
dframe.loc[i]=format_combinations
コードの最後の行を無視すると、正常に機能します。
このコードでエラーが発生します:
ValueError: cannot set a frame with no defined column
だから私は自分dframe
をに変更して列を追加しましたdframe=pd.dataframe(columns=list(range(2,n+1,1)))
次に、次のエラーが発生しました。
ValueError: cannot set a row with mismatched columns
私の質問は、空のデータフレームを作成してから、各反復の列としてformat_combinationリストを追加することは可能ですか?
今のところ、エラーはformat_combination
反復ごとにリストの長さが変わるという事実に起因していると思いますが、それは私の推測です。誰かが私がこのエラーを受け取る理由を説明でき、空のデータフレームの列としてリストを追加する方法があるかどうか。
私はまだパンダとデータフレームに不慣れで、なぜこの方法でデータフレームを作成できないのか知りたいだけです。これまでのところ、私が使用した唯一の方法は、データを含む辞書を作成し、それを使用してデータフレームを作成することです。以前にデータフレームが繰り返し作成された例に出くわしたことはないと思います。
これがあなたが探していた正確な解決策であるかどうかはわかりませんが、反復によってパンダのデータフレームを作成するときは、仲介としてnumpy配列を使用するのが好きです。あなたができることは:
import itertools as itr
import requests
import pandas as pd
# import numpy
import numpy as np
x=list(input("enter letters given:"))
n=len(x)
# initialize a list
all_combs = []
for i in range(2,n+1,1):
combinations=list(itr.combinations_with_replacement(x,i))
format_combinations=[]
for letters in combinations:
format_combinations.append(' '.join(letters))
for idx,word in enumerate(format_combinations):
word=word.replace(" ","")
format_combinations[idx]=word
# append each iteration to the list
all_combs.append(format_combinations)
# find the length of the longest iteration
pad = len(max(all_combs, key=len))
# create a numpy array from your list, pad with nans
arr = np.array([i + [np.nan]*(pad-len(i)) for i in all_combs])
# convert to dataframe
df = pd.DataFrame(arr)
# transpose to get one column per iteration
df = df.transpose()
編集:numpyを使用しない代替方法
import itertools as itr
import requests
import pandas as pd
x=list(input("enter letters given:"))
n=len(x)
# initialize empty dataframe
all_combs = pd.DataFrame()
for i in range(2,n+1,1):
combinations=list(itr.combinations_with_replacement(x,i))
format_combinations=[]
for letters in combinations:
format_combinations.append(' '.join(letters))
for idx,word in enumerate(format_combinations):
word=word.replace(" ","")
format_combinations[idx]=word
# create dataframe with one column named for this iteration
df = pd.DataFrame.from_dict({i: format_combinations})
# join with all_combs on the union of their indices
all_combs = all_combs.join(df, how='outer')
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加