[英]How can I split a row in a CSV-file into multiple rows using Python?
我有一個只有一行的 CSV 文件,但有很多相同的列標題(不重復)。 我的最終目標是分析給定列的值,這取決於前一個同名列的值(不是與其相鄰的列)。
我的數據可能如下所示:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ***start block*** | stimulus | words.RT | words.ACC | ***end block*** | ***start block*** | stimulus | words.RT | words.ACC | ***end block*** |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| | pic1.png | 2300 | 1 | | | pic2.png | 2401 | 0 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
等等。
現在,我希望能夠根據前一個塊中 words.ACC 的值來分析例如 words.RT 的值。
我不確定最好的方法是什么。 我嘗試將 CSV 加載到 pandas-dataframe 中:
import pandas as pd
file = "01.csv"
df = pd.read_csv(file, delimiter=";")
df.columns = df.columns.str.strip("\t")
df.columns = df.columns.str.strip(".34")
df = df.iloc[[0]]
這基本上給了我一個看起來像我之前展示的數據表。 是否可以根據塊將行拆分為多行? 對我來說,看起來我需要一個三維數組來對塊進行編碼? pandas 甚至可能嗎?
你可以創建
df1 = df.iloc[ : , 0:4]
df2 = df.iloc[ : , 4:8]
和 append 他們
df = df1.append(df2)
import pandas as pd
data = {
'A1': [1,2],
'B1': [3,4],
'C1': [5,6],
'D1': [7,8],
'A2': [1,2],
'B2': [3,4],
'C2': [5,6],
'D2': [7,8],
}
df = pd.DataFrame(data)
print(df)
df1 = df.iloc[: , 0:4]
df1.columns = ['A', 'B', 'C', 'D']
df2 = df.iloc[: , 4:8]
df2.columns = ['A', 'B', 'C', 'D']
df = df1.append(df2)
df = df.reset_index(drop=True)
print(df)
如果你有更多的塊,那么你可以使用for
-loop 和
df.iloc[ : , i:i+4]
import pandas as pd
data = {
'A1': [1,2],
'B1': [3,4],
'C1': [5,6],
'D1': [7,8],
'A2': [1,2],
'B2': [3,4],
'C2': [5,6],
'D2': [7,8],
'A3': [1,2],
'B4': [3,4],
'C5': [5,6],
'D6': [7,8],
}
df = pd.DataFrame(data)
print(df)
# get first block
new_df = df.iloc[:, 0:4]
new_df.columns = ['A', 'B', 'C', 'D']
# get other blocks
for i in range(4, len(df.columns), 4):
temp_df = df.iloc[:, i:i+4]
temp_df.columns = ['A', 'B', 'C', 'D']
new_df = new_df.append( temp_df )
new_df = new_df.reset_index(drop=True)
print(new_df)
編輯:
相同,但變量block_size
和 numbers 作為列名。
import pandas as pd
data = {
'A1': [1,2],
'B1': [3,4],
'C1': [5,6],
'D1': [7,8],
'A2': [1,2],
'B2': [3,4],
'C2': [5,6],
'D2': [7,8],
'A3': [1,2],
'B3': [3,4],
'C3': [5,6],
'D3': [7,8],
'A4': [1,2],
'B4': [3,4],
'C4': [5,6],
'D4': [7,8],
}
df = pd.DataFrame(data)
print(df)
block_size = 4
# get first block
new_df = df.iloc[:, 0:block_size]
# set numbers for columns
new_df.columns = list(range(block_size))
# get other blocks
for i in range(block_size, len(df.columns), block_size):
temp_df = df.iloc[:, i:i+block_size]
# set the same numbers for columns
temp_df.columns = list(range(block_size))
new_df = new_df.append( temp_df )
# after loop reset rows numbers (indexes)
new_df = new_df.reset_index(drop=True)
print(new_df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.