我尝试了各种可能性来找出错误的原因。但是没有发现错误的原因。能否请我帮忙,我的代码出了什么问题。
def businesslogic(dirs, userpath):
data = {}
for fold in dirs:
files = os.listdir(fold)
if 'Test.txt' in files:
with open(os.path.join(fold,'Test.txt'),'r') as te:
lines = [line.rstrip('\n') for line in te.readlines()]
else:
print('Test.txt does not exist')
rows = [value.split(';')[0] for value in lines]
data[fold] = [value.split(';')[1] for value in lines]
df = pd.DataFrame.from_dict(data)---->>>ValueError: arrays must all be same length
df.index = rows
cols = list(df.columns.values)
req = df.loc[['TubeType', 'Digits']]
req = req[cols].astype(int)
答案 0 :(得分:0)
由于文件夹不一定具有相同数量的文件,因此会出现此错误。使用您的格式,每个文件夹都表示为一列。并且所有文件夹的第一个文件将在第一行中,第二个文件在第二行中,以此类推...如果在两个不同的文件夹中有不同数量的文件,则会出现问题。一个特定的文件夹将需要10行(因为它包含10个文件),而另一个仅需要8行。Pandas认为这是输入错误。
如果您希望将所有信息都放在同一行中,可以执行以下操作:
# Example a data dict where folders contain different number of files
data= {'folder1' : ['file1', 'file2'], 'folder2' : ['file3'] }
pd.DataFrame({x : [[y for y in data[x]]] for x in data})
输出:
folder1 folder2
0 [file1, file2] [file3]