Вы пытаетесь получить доступ к объекту (client.getOutputStream()
), итерации по списку, таким образом, java.util.ConcurrentModificationException
. Измените List<>
на ConcurrentLinkedQueue
. Также для PrintWriter
здесь вы просто завершаете существующий поток.
Вот быстрый способ настроить DataFrame
:
import pandas as pd
import numpy as np
data = [
[False, "bird", ""],
[True, "fish", ""],
[True, "Tiger", ""],
[False, "Elephant", ""],
]
df = pd.DataFrame(data=data, columns=["A", "B", "C"])
Это создает переменную df
, содержащую DataFrame
в Pandas
.
Теперь используйте этот код для итерации по DataFrame
и установите каждое значение:
last = []
for index, row in df.iterrows():
if index == 0:
df.at[index, 'C'] = row['B'] # because first one has no previous to concatenate to
else:
if (row['A']): # check A
df.at[index, 'C'] = last['C']+','+row['B'] # if A is true, then concatenate previous B and this one
else:
df.at[index, 'C'] = row['B'] # else, use this B
last = row # now set this row to the last one that was accessed, for the next iteration of this loop
Если вы print(pd)
в этот момент, вы получите ожидаемый результат.
Вот полный код, который я использовал:
import pandas as pd
import numpy as np
data = [
[False, "bird", ""],
[True, "fish", ""],
[True, "Tiger", ""],
[False, "Elephant", ""],
]
df = pd.DataFrame(data=data, columns=["A", "B", "C"])
print(df)
last = []
for index, row in df.iterrows():
if index == 0:
df.at[index, 'C'] = row['B'] # because first one has no previous to concatenate to
else:
if (row['A']): # check A
df.at[index, 'C'] = last['B']+','+row['B']
else:
df.at[index, 'C'] = row['B']
last = row
print(df)