读取excel表中一列数据,并存储为数组,将数组中连续出现的相同字符串划分在一起,并初始化一个空数组X用来存储临时划分位置,从第一个划分位置存储,最后一个不相同元素不用存储划分位置,
时间: 2023-07-16 16:16:03 浏览: 52
可以使用Python中的pandas库来读取Excel表格,并使用numpy库中的unique函数来获取唯一值,再使用列表的切片和append方法来实现划分位置的存储。代码如下:
```python
import pandas as pd
import numpy as np
# 读取Excel表格中的一列数据
data = pd.read_excel('data.xlsx', usecols=['列名'])
arr = np.array(data['列名'])
# 获取唯一值
unique_arr = np.unique(arr)
# 初始化划分位置数组X
X = [0]
# 划分位置的判断和存储
for i in range(1, len(arr)):
if arr[i] != arr[i-1]:
X.append(i)
# 打印结果
print('原始数组:', arr)
print('唯一值数组:', unique_arr)
print('划分位置数组:', X)
```
其中,`data.xlsx`是要读取的Excel表格文件名,`列名`是要读取的列名。输出结果如下:
```
原始数组: ['a' 'a' 'b' 'c' 'c' 'c' 'd' 'd']
唯一值数组: ['a' 'b' 'c' 'd']
划分位置数组: [0, 2, 3, 6]
```
可以看到,原始数组中连续出现的相同字符串被划分在了一起,并且划分位置数组也成功地存储了临时划分位置。
相关问题
读取excel表中一列数据,并存储为数组,将数组中连续出现的相同字符串划分在一起,并初始化一个空数组X用来存储临时划分位置
可以使用Python中的pandas库来读取Excel表格中的一列数据,然后使用循环遍历该列数据,判断是否与前一个值相同,如果相同则将该值加入当前分组,如果不同则将当前分组存入结果数组中,并在空数组X中记录当前分组的结束位置。
以下是示例代码:
```python
import pandas as pd
# 读取Excel表格中的一列数据
data = pd.read_excel('example.xlsx', usecols=[0]).values.flatten()
# 初始化结果数组和临时划分位置数组
result = []
X = [0]
# 遍历数据
for i in range(1, len(data)):
# 如果当前值与前一个值相同,则将其加入当前分组
if data[i] == data[i-1]:
result[-1].append(data[i])
# 如果不同,则将当前分组存入结果数组中,并记录当前分组的结束位置
else:
result.append([data[i]])
X.append(i)
# 将最后一个分组存入结果数组中,并记录最后一个分组的结束位置
result.append([data[-1]])
X.append(len(data))
# 输出结果
print(result)
print(X)
```
其中,`usecols=[0]`表示只读取Excel表格中的第一列数据。`flatten()`方法将二维数组转换为一维数组。`result[-1]`表示结果数组中的最后一个分组。
将串口输入的字符串转化为数组并通过另一个串口传出
以下是Arduino代码示例:
```
void setup() {
Serial.begin(9600); // 设置串口通信速率为9600
Serial1.begin(9600); // 设置另一个串口通信速率为9600
}
void loop() {
if (Serial.available()) { // 如果串口有数据可用
String str = Serial.readStringUntil('\n'); // 读取一行字符串
str.trim(); // 去除字符串两端的空格和换行符
int len = str.length(); // 获取字符串长度
int arr[len]; // 定义数组
for (int i = 0; i < len; i++) { // 遍历字符串的每个字符
arr[i] = str.charAt(i) - '0'; // 将字符转化为数字并存入数组
}
for (int i = 0; i < len; i++) { // 遍历数组并通过另一个串口传出
Serial1.print(arr[i]);
Serial1.print(" ");
}
Serial1.println(); // 发送换行符
}
}
```
在这个示例中,我们使用了两个串口:Serial和Serial1。首先,在setup函数中,我们分别初始化了这两个串口,并将通信速率设置为9600。
在loop函数中,我们使用了Serial.available()函数来检查串口是否有数据可用。如果有,我们使用Serial.readStringUntil('\n')函数读取一行字符串,并使用String.trim()函数去除字符串两端的空格和换行符。接着,我们定义了一个数组,并使用for循环遍历字符串的每个字符,将其转化为数字并存入数组中。最后,我们再使用for循环遍历数组,并通过Serial1.print()函数将数组元素依次传出,同时在最后发送一个换行符。
需要注意的是,在Arduino中,串口通信的数据类型均为字符型,因此我们需要将字符转化为数字才能存入数组中。在上面的示例中,我们使用了字符型数字的ASCII码值来进行转化,因为字符'0'~'9'的ASCII码值正好是48~57。因此,我们可以通过减去'0'的ASCII码值来得到相应的数字值。例如,字符'5'的ASCII码值是53,减去'0'的ASCII码值48后,得到的就是数字5。